C# Itextsharp";令牌类型不可识别“;

C# Itextsharp";令牌类型不可识别“;,c#,pdf-generation,itextsharp,tiff,C#,Pdf Generation,Itextsharp,Tiff,我正在从tiff文件生成pdf。使用Acrobat7时,我在打开时遇到一个错误,即无法识别令牌类型。 我只看到了全文中的一些单词,但没有看到这个pdf中的图片 使用AcrobatReaderX,我可以正确地看到pdf。当我向下滚动时,我收到一条消息,该文件中有错误,但没有更多信息 有人知道问题出在哪里吗?我在Itext中尝试了许多PDF版本,但没有其他结果 下面是一些代码: Clock.hocr.Elements.hDocument hdoc = new Clock.hocr.E

我正在从tiff文件生成pdf。使用Acrobat7时,我在打开时遇到一个错误,即无法识别令牌类型。 我只看到了全文中的一些单词,但没有看到这个pdf中的图片

使用AcrobatReaderX,我可以正确地看到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();
文档来自类型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;
        }
    }


解决了这个问题!错误出现在错误的字符间距中。。。
修正为-0.0025,pdf正在运行

在野外有许多不同的TIFF不符合TIFF标准。这可能是一个原因。另一个原因可能是您使用iTextSharp将TIFF添加到PDF的方式。也许你做错了什么。在任何情况下,由于您不共享TIFF、PDF或您的任何代码,因此不太可能有人会回答您的问题。这是一个典型的“它不起作用”的评论,没有任何信息使它成为一个真正的问题。您好,我已经将tiff转换为jpg页面,并将其作为jpeg添加到pdf。。。同样的问题!我认为争吵不是问题所在!我不能分享这场争吵,因为这是账单!好的,在这种情况下,您使用iText做了一些错误的事情,因为我们可以创建包含JPEG的PDF,而没有任何问题。当我要求提供一个代码示例时,我希望看到一些真实的iText代码。相反,您指的是我们不知道的第三方项目。请先联系hOcr2Pdf.NET的支持人员。请提供一份暴露该问题的PDF,也许可以看到问题所在。请将您的代码提炼为我们可以帮助您调试的内容。您应该能够在大约十几行代码中将图像添加到新的PDF中。如果有问题,把你试过的贴出来。如果有效,开始一点一点地添加其他逻辑,直到有效或中断。
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();
                }
            }
        }
    }