2012-02-23 47 views
3

我有一個旨在用於打印的視圖,其中包含水印,在其他內容上繪製一些文本的透明視圖。打印到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

+0

向我們展示您正在使用的一些代碼..首先從那個開始\ – MethodMan 2012-02-23 20:01:40

+0

我不確定代碼的哪一部分可以幫助您查看,但發佈了兩個最相關的位。 – paulmelnikow 2012-02-23 20:23:04

+0

我會使用帶有透明背景的圖像作爲水印。非常簡單,完成你的目標。 – lnafziger 2012-12-14 21:05:51

回答

0

據我所知,沒有辦法使文本在PDF中無法選擇。 可能最好的解決方案是使用圖像水印代替。

但是,如果它位於文本的前面,則會使背景文字難以選擇。如果它背後的一切都會有同樣的問題,用表格模糊它們。因此,更好的行動計劃可能不是試圖讓文本無法選擇,而是讓表格背景透明。然後,使用圖像水印。

考慮,而不是使用CGPaths和動態生成它們從OMZ的想法,最簡單,最優雅的解決辦法是這樣的:

  1. 創建矢量水印通過在矢量編輯器中鍵入文本並擴展文本以創建輪廓。
  2. 將其另存爲SVG或PDF。
  3. 然後,把這個新的矢量圖形放在最上面作爲水印。它不會被選中,不會遮擋視圖,也不會被表格遮擋。
+0

謝謝。如果無法使文本無法選擇,則使用圖像是有意義的。但是因爲我使用的是交替排列的顏色,所以我沒有看到如何讓表格背景變得透明。 (我發佈了截圖。) – paulmelnikow 2012-02-23 20:30:40

+0

嗯。考慮到這一點,我認爲omz的答案是正確的。我會編輯我的答案來解釋新的想法。 – 2012-02-23 20:57:38

+0

@Jonas你的陳述並不準確,有這樣做的方法,實際上有幾種方法。在最壞的情況下,您可以使用普通的繪圖操作(直線和曲線)繪製文本,並且它不會被選中。 omz的答案是要走的路 – yms 2012-02-23 21:02:49

2

一種選擇是從字符串中創建一個或多個CGPath並將其繪製到PDF中。其中一種方法是使用CTFontCreatePathForGlyph,但對於整個字符串來說實際上做了很多工作,Core Text確實有幫助,但它是一個非常低級的框架。

如果您總是繪製相同的水印,在某些矢量圖形應用程序中創建靜態PDF並使用CGPDFPageDraw等將更容易。Illustrator具有文本對象的「轉換爲路徑」命令。