【问题标题】:iTextSharp ColumnText.SetSimpleColumn Addtext causes Error in Adobe Reader X 10.1.5iTextSharp ColumnText.SetSimpleColumn Addtext 导致 Adob​​e Reader X 10.1.5 中的错误
【发布时间】:2013-01-09 20:50:40
【问题描述】:

下面的代码说明了我在使用 iTextSharp 时遇到的问题。一切正常。 pdf 文件已创建并在屏幕上显示正确。当我从 Adob​​e Reader X 打印 pdf 时,它看起来完全正确,但 Adob​​e 报告“此页面存在错误。Acrobat 可能无法正确显示该页面。请联系创建 PDF 文档的人以更正问题。”

不幸的是,该文件必须附加到电子邮件中并发送给客户。错误消息不是很好看,我想修复它。它发生在我尝试过的所有版本的 Reader 中,包括今天安装的 10.1.15。

我在 Windows 7 Pro SP1 下有 iTextSharp 5.3.4.0

    private void writeTestDoc()
    {
        string fname = "test.pdf";
        float textWidth = 500;
        float leftMgn = 60;
        float rubricTop = 720;
        float leftPad = 5;
        float topPad = 12;
        float leading = 0;
        BaseFont baseCalibri = BaseFont.CreateFont("c:/windows/fonts/calibri.ttf", BaseFont.WINANSI, true);
        Font plainFont = new Font(baseCalibri, 11, Font.NORMAL);
        Document document = new Document();
        try
        {
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(fname, FileMode.Create));
            document.Open();
            PdfContentByte cb = writer.DirectContent;
            cb.BeginText();
            ColumnText ct = new ColumnText(cb);
            float boxTop = rubricTop;
            ct.SetSimpleColumn(leftMgn + leftPad, boxTop - topPad, leftMgn + textWidth, boxTop, leading, Element.ALIGN_CENTER);
            ct.AddText(new Phrase("A test message", plainFont));
            ct.Go();
            cb.EndText();
            document.Close();
        }
        catch (Exception ex)
        {
            writeFile("ERROR in writeTestDoc " + ex.Message);
        }
    }

【问题讨论】:

    标签: itextsharp adobe-reader


    【解决方案1】:

    删除cb.BeginText();cb.EndText();BT/ET 文本对象嵌套是非法的。报告您找到告诉您将BeginText()/EndTextColumnText 结合使用的文档的位置,以便我们可以要求作者从他或她的文档中进行更正。

    【讨论】:

    • 非常感谢。它确实解决了我的测试方法中的问题。然后我从我的真实方法中删除了所有 cb.BeginText() 和 cb.EndText() 但问题仍然存在。我犹豫发布整个方法 - 它包含 300 行代码。有什么方法可以诊断这个问题吗?
    • 如果您有 Acrobat,您可以使用 Preflight 对您的 PDF 进行语法检查。您将获得内容流中引入的所有错误的列表。
    • 我获得了 Acrobat 的副本,但 Preflight 没有提供任何线索。最终,我通过反复试验发现您不能将 PdfContentByte.ShowTextAligned 与 ColumnText(PdfContentByte) 方法混合使用。现在一切正常。
    • @JohnBuckwell,为什么我不能将ShowTextAlignedColumnText 混合使用?你能提供这方面的文件吗?
    • @tetri 我是 iText 的原始开发者,所以我希望你不要质疑我在这个话题上的权威。如果您使用ColumnText.showTextAligned(),该方法会在您的 PDF 中创建一个文本对象。该文本对象以BT 开头并以ET 结尾。 PDF 规范禁止您嵌套文本对象(如果您不相信我,请阅读 ISO-32000-1),因此如果您将文本图形方法与 ColumnText.showTextAligned() 混合使用,则会出现错误。您可以将这些方法与 PdfContentByte.showTextAligned() 混合使用,但这是一个不同的问题。
    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多