2016-09-09 8 views
1


私はPdfSharpライブラリを使用していますので、pdfのコード128フォントでバーコードを描く必要があります。 PDF図面でバーコードの下のように:PdfSharpバーコード128 IIS上の図が記号の隙間を作る

XFont BarcodeFont = new XFont("Code 128", 40, XFontStyle.Regular); 

tf.Alignment = XParagraphAlignment.Center; 
XRect barecodeLabel = new XRect(new XPoint(leftMargin, rectanglesPadding), new XSize(page.Width - rightMargin, BarcodeFont.Height + 10)); 
tf.DrawString(PrepareBarcode(item.ItemNo_), BarcodeFont, XBrushes.Black, barecodeLabel, XStringFormats.TopLeft); 
rectanglesPadding += barecodeLabel.Height - XUnit.FromPoint(5.0); 

は、バーコードのデータを準備:

private string PrepareBarcode(string itemNo) 
    { 
     int sumControl = SumControl(itemNo); 
     string kod = ""; 
     kod += (char)209; 
     kod += itemNo; 

     kod += (char)sumControl; 

     kod += (char)211; 
     return kod; 
    } 

和制御:

private int SumControl(string input) 
     { 
      int sum = 0; 

      for (int i = 0; i < input.Length; i++) 
      { 
       if (input[i] != ' ') 
       { 
        int znak = (int)input[i] - 32; 
        sum += (i + 1) * ((int)input[i] - 32); 
       } 
      } 
      sum += 104; 
      int rem = Convert.ToInt32(Decimal.Remainder(sum, 103)); 

      if (rem < 95) 
       return rem + 32; 
      else 
       return rem + 105; 
     } 

フォントがPDFに埋め込まれ、PDFがaspxページに戻りますMemoryStreamとしてフラッシュしてブラウザにフラッシュします。

WCF:

MigraDoc.DocumentObjectModel.Document doc = new MigraDoc.DocumentObjectModel.Document(); 
       MigraDoc.Rendering.DocumentRenderer renderer = new DocumentRenderer(doc); 
       MigraDoc.Rendering.PdfDocumentRenderer pdfRenderer = new MigraDoc.Rendering.PdfDocumentRenderer(true, PdfFontEmbedding.Always); 
       pdfRenderer.PdfDocument = document; 
       pdfRenderer.DocumentRenderer = renderer; 
       using (MemoryStream ms = new MemoryStream()) 
       { 
        pdfRenderer.Save(ms, false); 
        byte[] buffer = new byte[ms.Length]; 
        ms.Seek(0, SeekOrigin.Begin); 
        ms.Flush(); 
        ms.Read(buffer, 0, (int)ms.Length); 
        return ms; 
       } 

そして、ASPXページ:

try 
      { 
       zebexService = new SERVICES.NAV.WAREHOUSE.ZEBEX.ZebexClient(); 
       zebexService.Open(); 
       var wampirUserId = HttpContext.Current.GetWampirID(); 
       System.IO.MemoryStream stream = zebexService.PrintBarcodeLabels(wampirUserId, itemToPrintList); 
       zebexService.Close(); 

       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.ContentType = "application/pdf"; 
       HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; 
       HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=Druk etykiet:" + DateTime.Now.ToString("yy/mm/dd-hh:mm") + "_" + wampirUserId + ".pdf"); 

       HttpContext.Current.Response.BinaryWrite(stream.ToArray()); 
       HttpContext.Current.Response.Flush(); 
       stream.Close(); 
       HttpContext.Current.Response.End(); 
       Response.BinaryWrite(stream.ToArray()); 
       Response.Flush(); 
      } 

私はローカルホスト(窓10、asp.net devの上でそれを描きます。サーバー、lan​​g。

[Correctly drawed barcode in pdf on localhost]]

を私はWindows Serverの2012R2、LANGとIISサーバーへのコード(WCF)を移動する場合:PL)が正しくdrawedています。インストールしたのと同じフォント(code128.ttf)と英語、私は文字の間に大きなギャップでバーコードを取得する:

[Not correctly drawed barcode]

私はこの問題を解消するために何ができますか?

+0

コンソールのエラーを確認してください。 – Webruster

+0

リソースはドキュメントとして解釈されますが、MIMEタイプapplication/pdf:http:// localhost:59384/Warehouse/Buffer/PrintLabels.aspxで転送されるリソースです。 – Piotr

+0

サーバーに移動したアプリケーションでエラーが発生しましたか? – Webruster

答えて

1

開発とサーバーの両方で動作するPDFsharpを使用して、コードを表示してバーコード(EAN 13)を生成することができます。しかし、それは別のフォントを使用します:ean13.ttf、これはおそらくあなたのために動作しません。

 using (PdfDocument document = new PdfDocument()) 
     { 
      //create pdf header 
      document.Info.Title = "My barcode"; 
      document.Info.Author = "Me"; 
      document.Info.Subject = "Barcode"; 
      document.Info.Keywords = "Barcode, Ean13"; 
      document.Info.CreationDate = DateTime.Now; 

      //create new pdf page 
      PdfPage page = document.AddPage(); 
      page.Width = XUnit.FromMillimeter(210); 
      page.Height = XUnit.FromMillimeter(297); 

      using (XGraphics gfx = XGraphics.FromPdfPage(page)) 
      { 
       //make sure the font is embedded 
       var options = new XPdfFontOptions(PdfFontEmbedding.Always); 

       //declare a font for drawing in the PDF 
       XFont fontEan = new XFont("Code EAN13", 75, XFontStyle.Regular, options); 
       XTextFormatter tf = new XTextFormatter(gfx); 

       //create the barcode from string 
       gfx.DrawString(barcodeText, fontEan, XBrushes.Black, new XRect(15, 40, page.Width, page.Height), XStringFormat.TopLeft);  
      } 
     } 
+0

ありがとうございますが、私はABB302MOELのようなインデックス番号を描く必要があります。そうすれば、ean13は適切ではありません。 – Piotr

+0

私は知っていますが、おそらくページを高さで指定すると問題が解決されます。 – VDWWD

+0

私はすでにそれをしています: 'PdfPage page = document.AddPage(); page.Width = XUnit.FromInch(2.76); page.Height = XUnit.FromInch(2.07); XGraphics gfx = XGraphics.FromPdfPage(page); gfx.MFEH = PdfFontEmbedding.Always; gfx.MUH = PdfFontEncoding.Unicode; XTextFormatter tf =新しいXTextFormatter(gfx); ' – Piotr

関連する問題