有没有办法在PDF中为单个图像放置2个位图实例?一个在屏幕上显示时显示,另一个在打印时显示?
我们遇到的问题是将图表呈现为位图。如果我们做300 dpi,则轴线,边界等消失。如果我们做96 dpi,那么打印看起来很糟糕。
谢谢 - 戴夫
答案 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");
}