打印到PDF时,无法选择文本

时间:2012-02-23 20:00:13

标签: cocoa pdf

我有一个专为打印而设计的视图,其中包含一个水印,一个透明的视图,可以在其他内容上绘制一些文字。

打印并使用Mac OS 另存为PDF 功能时,可以选择水印文本。有时这会干扰选择其他内容,有时则会分散注意力。

如何在生成的PDF中无法选择文本?

我尝试在其他内容后面而不是在前面绘制水印。它并没有阻止选择水印,而是使其不受其他内容的影响。但是,表格视图行会遮挡水印,这当然更糟糕。


评论者要求代码,所以这里有一些准备视图的代码:

// self.view is the print view
// watermark is an instance of WatermarkBackground, an NSView
if (watermark) {
    watermark.frame = self.view.frame;
    [self.view addSubview:watermark positioned:NSWindowAbove relativeTo:nil];
}

执行绘图的[WatermarkBackground drawRect]中的行:

// _message is an NSString
// textAttributes returns a dictionary with a color and font
[_message drawWithRect:textRect
               options:NSLineBreakByWordWrapping
            attributes:[WatermarkBackground textAttributes]];

我打算最初发布这个屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分:2)

一种选择是从字符串中创建一个或多个CGPath,然后将其绘制到PDF中。一种方法是使用CTFontCreatePathForGlyph,但实际上要为整个字符串做很多工作,Core Text确实有帮助,但它是一个非常低级的框架。

如果你总是绘制相同的水印,那么在某些矢量图形应用程序中创建静态PDF并使用CGPDFPageDraw等更容易.Illustrator有一个“转换为路径”命令用于文本对象。

答案 1 :(得分:0)

据我所知,在PDF中无法使文本无法选择。 可能最好的解决方案是使用图像水印。

<击>

但是,如果它位于文本前面,则可能难以选择背景文本。如果它落后于一切,那么使用表格来掩盖它会有同样的问题。因此,可能更好的行动计划不是试图使文本无法选择,而是使表背景透明。然后,使用图像水印。

从omz中获取一个想法,而不是使用CGPath并在运行中生成它们,最简单,最优雅的解决方案是:

  1. 通过在矢量编辑器中键入文本并展开文本以创建轮廓来创建矢量水印。
  2. 将其另存为SVG或PDF格式。
  3. 然后,将这个新的矢量图形放在顶部作为水印。它不会被选中,不会遮挡视图,也不会被表格遮挡。