2013-04-03 82 views
-1

我從tiff文件生成pdf。使用Acrobat 7時,出現打開令牌類型無法識別的錯誤。 我只看到全文中的一些單詞,但沒有看到這個pdf中的圖片!Itextsharp「令牌類型未被識別」

隨着acrobat閱讀器X我正確地看到PDF。當我向下滾動時,我收到一條消息,指出此文件中有錯誤,但沒有更多信息。

任何人都知道問題在哪裏?我已經在Itext中嘗試過很多PDF版本而沒有其他結果!

下面是一些代碼:

 Clock.hocr.Elements.hDocument hdoc = new Clock.hocr.Elements.hDocument(); 
     hdoc.AddFile("out3.html"); 
     Clock.hocr.PDFSettings pdfset = new Clock.hocr.PDFSettings(); 
     pdfset.ImageType = Clock.hocr.PdfImageType.JPeg; 
     pdfset.ImageQuality = 50; 
     //pdfset.Subject = "Fulltext"; 
     //pdfset.Title = "ft"; 
     //pdfset.Language = "german"; 
     //pdfset.Author = "datapool"; 
     pdfset.Dpi=300; 
     //pdfset.Keywords="..."; 
     //pdfset.PdfOcrMode =Clock.hocr.OcrMode.Tesseract; 
     pdfset.WriteTextMode = Clock.hocr.WriteTextMode.Word; 

     //pdfset.Dpi = 300; 

     Clock.hocr.PdfCreator pdfcreat = new Clock.hocr.PdfCreator(pdfset,"test.pdf"); 
     List<Image> pages = GetAllPages("test.tif"); 



     for (int i = 0; i<hdoc.Pages.Count;i++) 
     { 
      Clock.hocr.Elements.hPage hpage = hdoc.Pages[i]; 
      pdfcreat.AddPage(hpage, pages[i]); 


     } 


     pdfcreat.SaveAndClose(); 

的Clock.hocr模塊,你可以找到:http://hocrtopdf.codeplex.com/

public void AddPage(hPage page, System.Drawing.Image pageImage) 
    { 
     doc.NewPage(); 
     doc.AddHeader("COPYRIGHT", "DATAPOOL GmbH"); 
     AddImage(pageImage); 
     WriteUnderlayContent(page); 

    } 

文檔是從類型itextsharp.text.document

public void AddImage(System.Drawing.Image image) 
    { 
     try 
     { 
      if (OnProcessImage != null) 
      { 
       AddImage(OnProcessImage(image)); 
       return; 
      } 

      iTextSharp.text.Image i = GetImageForPDF(ImageProcessor.GetAsBitmap(image)); 

      i.SetAbsolutePosition(0, 0); 
      // doc.SetPageSize(new iTextSharp.text.Rectangle(i.Width, i.Height)); 
      i.ScaleAbsolute(doc.PageSize.Width, doc.PageSize.Height); 
      doc.Add(i); 

     } 
     catch (Exception x) 
     { 
      Debug.WriteLine(x.Message); 
      throw x; 
     } 
    } 

...

private void WriteUnderlayContent(hPage page) 
    { 
     string pageText = page.Text; 
     foreach (hParagraph para in page.Paragraphs) 
     { 
      foreach (hLine line in para.Lines) 
      { 
       if (pdfSettings.WriteTextMode == WriteTextMode.Word) 
       { 
        line.AlignTops(); 
        foreach (hWord c in line.Words) 
        { 
         c.CleanText(); 
         BBox b = BBox.ConvertBBoxToPoints(c.BBox, pdfSettings.Dpi); 
         BBox lineBox = BBox.ConvertBBoxToPoints(line.BBox, pdfSettings.Dpi); 
         PdfContentByte cb = cb = writer.DirectContentUnder; 

         BaseFont base_font = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, false); 
         iTextSharp.text.Font font = new iTextSharp.text.Font(base_font); 

         float h = (int)Math.Ceiling(b.Height); 
         int font_size = (int)Math.Ceiling(h); 
         if (font_size == 0) 
          font_size = 2; 

         cb.BeginText(); 
         cb.SetFontAndSize(base_font, (float)font_size); 
         cb.SetTextMatrix(b.Left, doc.PageSize.Height - b.Top - b.Height); 
         //float spacing = (c.BBox.Width/(c.Text.ToCharArray().Count()))/100; 
         float spacing = (c.BBox.Width/(c.Text.ToCharArray().Count()))/100 ; 
         cb.SetCharacterSpacing(spacing); 
         cb.ShowText(c.Text + " "); 
         cb.EndText(); 
        } 
       } 
       else 
       { 
        line.CleanText(); 
        BBox b = BBox.ConvertBBoxToPoints(line.BBox, pdfSettings.Dpi); 
        BBox lineBox = BBox.ConvertBBoxToPoints(line.BBox, pdfSettings.Dpi); 
        PdfContentByte cb = cb = writer.DirectContentUnder; 

        BaseFont base_font = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, false); 
        iTextSharp.text.Font font = new iTextSharp.text.Font(base_font); 

        float h = (int)Math.Ceiling(b.Height); 
        int font_size = (int)Math.Ceiling(h); 
        if (font_size == 0) 
         font_size = 2; 

        cb.BeginText(); 
        cb.SetFontAndSize(base_font, (float)font_size); 
        cb.SetTextMatrix(b.Left, doc.PageSize.Height - b.Top - b.Height); 
        float spacing = (line.BBox.Width/(line.Text.ToCharArray().Count()))/100; 
        cb.SetCharacterSpacing(spacing); 
        cb.ShowText(line.Text); 
        cb.EndText(); 
       } 
      } 
     } 
    } 
+0

在野外有許多不符合TIFF標準的TIFF。這可能是一個原因。另一個原因可能是您使用iTextSharp將TIFF添加到PDF中。也許你做錯了什麼。無論如何,因爲您不共享TIFF,PDF或任何代碼,所以有人不太可能回答您的問題。這是一個典型的「它不起作用」的評論,沒有任何信息使其成爲一個真正的問題。 –

+0

你好,我已經將tiff轉換爲jpg頁面,並將其添加爲pdf格式,並提供相同的問題!我認爲tiff不是問題!我不能分享這個tiff,因爲它是一個賬單! – user1688566

+0

好的,在這種情況下,您在iText上做了一些錯誤,因爲我們可以毫無問題地創建包含JPEG的PDF。當我詢問代碼示例時,我期待看到一些真正的iText代碼。相反,您所指的是我們未知的第三方項目。請首先聯繫hOcr2Pdf.NET的支持人員。 –

回答

0

解決了問題!錯誤是在錯誤CharacterSpacing ... 固定它到-0.0025和PDF正在工作!