2012-02-23 18 views
3

私は透かしを含む印刷用に設計されたビューを持っています。透かしは他のコンテンツの上にテキストを描画します。PDFに印刷するときにテキストを選択できないようにする

Mac OSで印刷して使用する場合PDF形式で保存機能では、ウォーターマークのテキストを選択できます。他のコンテンツを選択するのが妨げられることもあります。

生成されたPDFでテキストを選択できないようにするにはどうすればよいですか?

私は、正面ではなく他のコンテンツの裏に透かしを描こうとしました。それは透かしの選択を妨げませんでしたが、それを他のコンテンツの途中に残しました。しかし、テーブルビューの行は透かしを隠してしまいましたが、もちろん悪いです。

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

:描画を行います

// 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]の行:


コメンターはので、ここでビューを用意し、いくつかのコードがあります、コードを求め

私はこのスクリーンショットをもともと投稿するつもりでした:

enter image description here

+0

使用しているコードを表示します。それではまず最初に\ – MethodMan

+0

コードのどの部分が参考になるのか分かりませんが、最も関連性の高い2つのビットを投稿しました。 – paulmelnikow

+0

透かしの背景が透明な画像を使用します。非常にシンプルで、あなたの目標を達成します。 – lnafziger

答えて

0

私が知る限り、PDFでテキストを選択できないようにする方法はありません。 おそらく最も良い解決策は、代わりに画像透かしを使用することです。

ただし、テキストの前にある場合は、背景テキストを選択するのが難しくなります。それがすべての背後にある場合、テーブルでそれを隠すことと同じ問題があります。だから、より良い行動計画は、テキストを選択不能にしようとするのではなく、テーブルの背景を透明にすることです。次に、画像透かしを使用します。

代わりCGPathsを使ってその場でそれらを生成する、最も簡単な、最もエレガントな解決策はこれだろう、OMZからアイデアを取る:

  1. ベクトルエディタでテキストを入力することで、ベクトルの透かしを作成します。アウトラインを作成するためにテキストを拡大します。
  2. SVGまたはPDF形式で保存してください。
  3. 次に、新しいベクトルグラフィックをウォーターマークとして上に置きます。これは選択できず、ビューが不明瞭にならず、テーブルによって覆い隠されません。
+0

ありがとうございます。テキストを選択できないようにする方法がない場合は、画像を使用することが理にかなっています。しかし、私は行の色を交互に使用しているので、テーブルの背景を透明にする方法はわかりません。 (スクリーンショットを投稿しました) – paulmelnikow

+0

Hm。それを念頭に置いて、私はomzの答えが正しいと思います。新しいアイデアを説明するために私の答えを編集します。 –

+0

@ジョナスあなたの声明は正確ではありませんが、実際にはいくつかの方法があります。最悪の場合のシナリオでは、通常の描画操作(線や曲線)を使用してテキストをペイントすることができ、選択することはできません。 omzの答えは行く方法です – yms

2

文字列からCGPathを1つまたは複数作成し、代わりにPDFに描画することもできます。これを行う1つの方法はCTFontCreatePathForGlyphを使用することですが、実際には文字列全体に対してこれを行うにはかなりの作業が必要ですが、Core Textは役に立ちますが、かなり低レベルのフレームワークです。

同じ透かしを描画する場合は、ベクターグラフィックスアプリケーションで静的PDFを作成し、CGPDFPageDrawなどで使用する方がずっと簡単です。Illustratorには、テキストオブジェクトの「パスに変換」コマンドがあります。

関連する問題