Aspose.PDF For .NETで、PDFに追加した画像に(オーバープリント)を適用する方法を教えてください

Aspose PDF For .NETを使用しています。
Page.AddStampで追加した画像にオーバープリントを適用する方法を教えてください。

■Page.AddStamp

■オーバープリント
https://www.too.com/support/faq/adobe/22897.html

@hh452jlaefa

お客様の要件の実現可能性を調査する必要があります。 ただし、スタンプでオーバープリントプレビューが有効になっているサンプルPDFドキュメントを共有してください。 それに応じて、フィードバックをさらに共有します。

回答ありがとうございます。

Aspose.PDF For .NETを購入済です。

評価版のAspose.PSD For.NETを使って、オーバープリントを設定したPDFを作っています。

  1. stamp.png⇒stamp.pdf ※Aspose.PSDで、オーバープリント設定したPDFを作る(CreateStampPdf)
  2. stamp.pdf + original_doc.pdf ⇒ Aspose.PDFで、PDFを合成する(StampPdf)

pdfAndPngFile.zip (450.9 KB)

しかし、オーバープリントを設定しても、Acrobat Readerで確認をするとオーバープリントが設定されていないようです。
お手数をおかけしますが、まちがっている箇所を教えてください

private static void StampPdf()
{

    // create overprint stamp.pdf with Aspose.PSD
    PsdUtils.CreateStampPdf();

    // document PDF
    PdfFileStamp docPdf = new PdfFileStamp();
    docPdf.BindPdf(@"C:\WORK\Aspose\original_doc.pdf");

    // stamp PDF
    Aspose.Pdf.Facades.Stamp stampPdf = new Aspose.Pdf.Facades.Stamp();
    stampPdf.BindPdf(@"C:\WORK\Aspose\stamp.pdf", 1);
    stampPdf.SetOrigin(20, 20);
    stampPdf.IsBackground = false;


    docPdf.AddStamp(stampPdf);
    docPdf.Save(@"C:\WORK\Aspose\stamped_doc.pdf");
    docPdf.Close();
}

以下は、Aspose.PSDでオーバープリントを設定したPDFを作るコード。

public static void CreateStampPdf()
{
    FileStream stream = new FileStream(@"C:\WORK\Aspose\stamp.png", FileMode.Open);
    Layer layer = new Layer(stream);

    PsdOptions psdOptions = new PsdOptions();
    psdOptions.Source = new FileCreateSource(@"C:\WORK\Aspose\stamp.psd");
    psdOptions.ColorMode = ColorModes.Cmyk;
    psdOptions.CompressionMethod = CompressionMethod.Raw;
    psdOptions.Version = 6;


    PsdImage psdImage = (PsdImage)PsdImage.Create(psdOptions, layer.Width,layer.Height);
    psdImage.AddLayer(layer);

    // if resouce is null then lyr.BlendingOptions throws System.ArgumentNullException.
    LayerResource idResource = new LyidResource(psdImage.LinkedLayersManager.GetLinkGroupId(psdImage.Layers[1]) );
    LayerResource[] resources = new LayerResource[1] { idResource };
    psdImage.Layers[1].Resources = resources;
    
    // all layers overprint true.
    foreach (Layer lyr in psdImage.Layers)
    {
        StrokeEffect effect = lyr.BlendingOptions.AddStroke(FillType.Color);
        effect.Overprint = true;
    }
    
    // save stamp.pdf
    psdImage.Save(@"C:\WORK\Aspose\stamp.pdf", new PdfOptions());
    
}

@hh452jlaefa

Aspose.PDF for .NET 21.1でシナリオをテストしているときに、最後に問題に気付くことができました。 PDFスタンプが出力PDFに正しく配置されていませんでした。

ただし、stamp.pdfファイルでオーバープリントが有効になっていることを示すスクリーンショットを共有してください。 また、Aspose.PDFを使用して最終的に生成する予定の出力PDFドキュメントを共有してください。 それに応じて、さらにサポートを進めます。

ご不便をおかけしてしまい申し訳ございません。

確認ありがとうございます。

stamp.pdfを確認しました。
(今回は別の2つの画像を使ってstamp.pdfを作っています)
オーバープリントが有効になっていませんでした。(ScreenShot_AdobeReader.png)

Aspose.PSDを使ってオーバープリントを設定する方法が間違っていたようです。
StrokeEffect.Overprint = trueを設定したのですが、この方法ではオーバープリントは有効にはならないのでしょうか。

たびたび、お手数をお掛けして申し訳ございませんが、よろしくお願いいたします。

Overprint.zip (940.7 KB)

FileStream streamBlue = new FileStream(@"C:\WORK\Aspose\Overprint\blue_CMYK.png.jpg", FileMode.Open);
Layer layerBlue = new Layer(streamBlue);

FileStream streamOrange = new FileStream(@"C:\WORK\Aspose\Overprint\Orange_CMYK.png.jpg", FileMode.Open);
Layer layerOrange = new Layer(streamOrange);


PsdOptions psdOptions = new PsdOptions();
psdOptions.Source = new FileCreateSource(@"C:\WORK\Aspose\Overprint\stamp.psd");
psdOptions.ColorMode = ColorModes.Cmyk;
psdOptions.CompressionMethod = CompressionMethod.Raw;
psdOptions.Version = 6;
PsdImage psdImage = (PsdImage)PsdImage.Create(psdOptions, Math.Max(layerBlue.Width , layerOrange.Width), Math.Max(layerBlue.Height, layerOrange.Height));


LayerResource idResource;
LayerResource[] resources;


psdImage.AddLayer(layerBlue);
// if resouce is null then lyr.BlendingOptions throws ArgumentNullException.
idResource = new LyidResource(psdImage.LinkedLayersManager.GetLinkGroupId(psdImage.Layers[1]));
resources = new LayerResource[1] { idResource };
psdImage.Layers[1].Resources = resources;


psdImage.AddLayer(layerOrange);
// if resouce is null then lyr.BlendingOptions throws ArgumentNullException.
idResource = new LyidResource(psdImage.LinkedLayersManager.GetLinkGroupId(psdImage.Layers[2]));
resources = new LayerResource[1] { idResource };
psdImage.Layers[2].Resources = resources;


// all layers overprint true.
foreach (Layer lyr in psdImage.Layers)
{
    StrokeEffect effect = lyr.BlendingOptions.AddStroke(FillType.Color);
    effect.Overprint = true;
}

// save stamp.pdf
psdImage.Save(@"C:\WORK\Aspose\Overprint\stamp.pdf", new PdfOptions());

@hh452jlaefa

オーバープリントが有効になっているPDFを生成できないため、この問題はAspose.PSDに関連しているようです。 Aspose.PSDを参照してケースを確認しており、フィードバックをお送りします。

確認ありがとうございます。
よろしくお願いいたします。

@hh452jlaefa

問題をさらに調査して解決するために、問題追跡システムでID PSDNET-811の問題を作成しました。 このスレッドは問題にリンクされているため、問題が修正されたら通知を受けることができます。

確認ありがとうございます。回答お待ちしております。

念のため確認ですが、Aspose.PSDは評価版(Trial)を使っています。
評価版(Trial)なので、機能を制限しているのが原因ではないでしょうか?

通常、評価版を使用する場合、透かしが出力に表示されます。 他のいくつかの機能も制限されています。 問題が修正され次第、更新します。 30日間の無料トライアルライセンスを使用してAPIを評価することも検討できます。

すいません、確認したところ重ねる画像ファイルの色(CMYK)に問題がありそうなので、再度確認します

CMYKが重なるの2つのLayer(image)を重ねたのが原因かと思ったのですが、
単純にKだけのtifをLayerに追加して作ったPDFもOverprintが有効になりませんでした。

申し訳ございませんが、引き続き確認をお願いします。

@hh452jlaefa

共有サンプルコードや画像と同様に、使用しているAspose.PSD for .NETのバージョンを共有していただけませんか。画像の読み込みでも例外が発生します。

image.png (717.7 KB)

回答おくれてしまい、すいませんでした。
Aspose.PSDは、NuGetから取得した20.12.0(Trial)を使っています。AsposePSD.png (64.2 KB)

その後、Overprintについて色々調べました。
そしてPDFに次のような操作が必要だとわかりました。

  1. OverPrintしたい/ImageのColorSpaceにDeviceNを設定する
  2. DeviceNのtintTransform("<</Length 123 /FunctionType 4 /Domain …)を設定する
  3. ExtGstateに/OPM 1 /OP trueを設定する

Aspose製品(PSD , PDF , または他の製品)でこれらの操作をすることができるのか教えてください。

@hh452jlaefa

現在、要求されたサポートはAspose.PSDAPIでは利用できません。 ID PSDNET-821のチケットが問題追跡システムで作成され、要求されたサポートを提供します。 このスレッドは問題にリンクされているため、問題が修正されたら通知を受けることができます。