在PDF中有2个位图分辨率

时间:2013-02-08 00:47:53

标签: pdf pdf-generation

有没有办法在PDF中为单个图像放置2个位图实例?一个在屏幕上显示时显示,另一个在打印时显示?

我们遇到的问题是将图表呈现为位图。如果我们做300 dpi,则轴线,边界等消失。如果我们做96 dpi,那么打印看起来很糟糕。

谢谢 - 戴夫

5 个答案:

答案 0 :(得分:5)

您可以使用“可选内容”执行此操作。使用“打印”事件提供使用应用程序字典会使内容适合打印。 (注意,并非所有打印应用程序都会遵守此规定。)

请参阅PDF参考手册,在我的1.7版第4.10节“可选内容”中,从第364页开始。

答案 1 :(得分:0)

是的,有一种方法,虽然我不知道。我们用它作为同事的恶作剧,在打印文档时,出现了一些完全其他的图片

答案 2 :(得分:0)

您还可以使用2个只读文本框字段并在字段外观上绘制图像。然后,对于一个字段,您可以将其可见性设置为VisibleNonPrintable和其他HiddenButPrintable。

答案 3 :(得分:0)

您可以添加替代图像字典PDF Spec,第8.9.5.4节),该图片可以指定要用于打印的图像。

答案 4 :(得分:0)

我实现了这个(使用iText)。对于其他需要这些的人来说,这里是代码。并you can download the source at my blog

    static void Main(string[] args)
    {
        Document document = new Document(new Rectangle(0, 0, 8.5f * 72.0f, 11 * 72));
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(Path.GetFullPath(@"..\..\test_dotnet.pdf"), FileMode.OpenOrCreate, FileAccess.ReadWrite));
        document.Open();

        document.Add(new Paragraph("Visibility test"));


        // not displayed on printer
        PdfLayer layer = new PdfLayer("screen", writer);
        layer.OnPanel = false;
        layer.SetPrint("Print", false);
        layer.View = true;

        PdfContentByte cb = writer.DirectContent;
        cb.BeginLayer(layer);

        Image img = Image.GetInstance(Path.GetFullPath(@"..\..\building_01.png"));
        img.SetAbsolutePosition(72, 72 * 7);
        cb.AddImage(img);

        cb.EndLayer();


        // not displayed on screen
        layer = new PdfLayer("print", writer);
        layer.OnPanel = false;
        layer.SetPrint("Print", true);
        layer.View = false;

        cb = writer.DirectContent;
        cb.BeginLayer(layer);

        img = Image.GetInstance(Path.GetFullPath(@"..\..\building_02.png"));
        img.SetAbsolutePosition(72, 72 * 3);
        cb.AddImage(img);

        cb.EndLayer();


        document.Close();

        Console.Out.WriteLine("all done");
    }