微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iText7 PDF可以正确呈现,但在Adobe Reader中打印不正确

如何解决iText7 PDF可以正确呈现,但在Adobe Reader中打印不正确

我的任务是在许多现有的PDF中添加水印,并且在C#中为此使用iText7。在此图片中可以看到结果(使用空白pdf)

PDF on screen

它在任何地方都可以正常显示,并且可以从Chrome和Edge完美打印。但是,从Adobe Acrobat Reader打印时,会发生以下情况:

Print preview in Adobe reader

谁比我更了解PDF,谁能帮助解决这个问题?我正在使用iText的7.1.13版本。

可在此处获得测试pdf:

https://potanteststorage.blob.core.windows.net/pdf/Test.pdf

C#代码

public static void AddProductionWatermarks(string sourceFile,string destinationPath)
{
    float watermarkTrimmingRectangleWidth = 75;
    float watermarkTrimmingRectangleHeight = 250;

    //Custom text
    float formWidth = 75;
    float formHeight = 250;
    float formXOffset = 0;
    float formYOffset = 0;

    float xTranslation = 50;
    float yTranslation = 0;

    double rotationInRads = Math.PI / 2;

    PdfFont font = PdfFontFactory.CreateFont(StandardFonts.TIMES_ROMAN);
    float fontSize = 12;

    PdfDocument pdfDoc = new PdfDocument(new PdfReader(sourceFile),new PdfWriter(destinationPath));
    var numberOfPages = pdfDoc.GetNumberOfPages();
    pdfpage page = null;

    for (var i = 1; i <= numberOfPages; i++)
    {
        page = pdfDoc.GetPage(i);
        Rectangle ps = page.GetPageSize();

        //PRODUCTION watermark -------------------------------------------------------
        float prodBottomLeftX = -20;
        float prodBottomLeftY = ps.GetHeight() / 2;

        Rectangle prodWatermarkTrimmingRectangle = new Rectangle(prodBottomLeftX,prodBottomLeftY,watermarkTrimmingRectangleWidth,watermarkTrimmingRectangleHeight);
        PdfWatermarkAnnotation prodWatermark = new PdfWatermarkAnnotation(prodWatermarkTrimmingRectangle);

        AffineTransform transform2 = new AffineTransform();
        transform2.Translate(xTranslation,yTranslation);
        transform2.Rotate(rotationInRads);

        PdfFixedPrint fixedPrint2 = new PdfFixedPrint();
        prodWatermark.SetFixedPrint(fixedPrint2);

        PdfFormXObject form2 = new PdfFormXObject(formRectangle);
        PdfCanvas canvas2 = new PdfCanvas(form2,pdfDoc);

        transform2.GetMatrix(transformValues);
        canvas2.SaveState()
            .BeginText().SetColor(new DeviceRgb(255,36,0),true)
            .SetTextMatrix(transformValues[0],transformValues[1],transformValues[2],transformValues[3],transformValues[4],transformValues[5])
            .SetFontAndSize(font,fontSize)
            .showtext("PRODUCTION")
            .EndText()
            .RestoreState();

        canvas2.Release();

        prodWatermark.SetAppearance(PdfName.N,new PdfAnnotationAppearance(form2.GetPdfObject()));
        prodWatermark.SetFlags(PdfAnnotation.PRINT);
        page.AddAnnotation(prodWatermark);
    }

    page?.Flush();
    pdfDoc.Close();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。