2013-04-03 2 views
-1

Я создаю pdf-файл из tiff-файла. С Acrobat 7 я получил ошибку при открытии, что токен не распознается. Я вижу только некоторые слова из полного текста, но не фотографии в этом pdf!Itextsharp «тип токена не распознан»

С читателем acrobat X Я правильно вижу pdf. когда я прокручиваю вниз, я получил сообщение о том, что в этом файле есть ошибка, но больше информации.

Кто-нибудь знает, где проблема? Я пробовал много PDF-версий в Itext без другого результата!

Вот код:

 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. Это может быть одной из причин. Другая причина может заключаться в том, как вы добавляете TIFF в PDF, используя iTextSharp. Может быть, вы делаете что-то неправильно. В любом случае, поскольку вы не разделяете TIFF, PDF и ни один из ваших кодов, очень маловероятно, что кто-то ответит на ваш вопрос. Это типичное замечание «не работает» без какой-либо информации, которая делает его реальным вопросом. –

+0

Здравствуйте, я преобразовал tiff в jpg-страницы и добавил как jpeg в pdf ... с той же проблемой! Я думаю, что это не проблема! Я не могу поделиться этим тиффом, потому что это счет! – user1688566

+0

ОК, в этом случае вы делаете что-то не так с iText, потому что мы можем создавать PDF-файлы, содержащие JPEG, без каких-либо проблем. Когда я попросил образец кода, я ожидал увидеть какой-то настоящий iText-код. Вместо этого вы имеете в виду проект третьей стороны, который нам неизвестен. Сначала обратитесь в службу поддержки hOcr2Pdf.NET. –

ответ

0

Решил проблему! ошибка была неправильной CharacterSpacing ... исправил ее до -0.0025, и pdf работает!