.NETコアをサポートする最新のiTextSharpライブラリはですが、私はそれを正当に使用することはできません。私のコードをオープンソースにすることも、ライセンスを購入することも私の選択肢ではありません。したがって、私は昔、サードパーティのライブラリを使用します。
Install-Package iTextSharp.LGPLv2.Core
最新版、私が使用しているものを、この記事の時点で1.3.2
後usingsは
using System;
using System.Drawing.Imaging;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
を必要としていますさ
pdfで画像の透明度を高めるには、画像を正しい形式で開く必要があります。
var preImage = System.Drawing.Image.FromFile(imagePath);
var image = Image.GetInstance(preImage, ImageFormat.Png);
画像INGの、ここで
canvas.AddImage(image);//do not put .AddImage(image, true);
が
var imagePath = "logo.png";
var pdfPath = "edit_this.pdf";
//load pdf file
var pdfBytes = File.ReadAllBytes(pdfPath);
var oldFile = new PdfReader(pdfBytes);
//load image
var preImage = System.Drawing.Image.FromFile(imagePath);
var image = Image.GetInstance(preImage, ImageFormat.Png);
preImage.Dispose();
//optional: if image is wider than the page, scale down the image to fit the page
var sizeWithRotation = oldFile.GetPageSizeWithRotation(1);
if (image.Width > sizeWithRotation.Width)
image.ScalePercent(sizeWithRotation.Width/image.Width * 100);
//set image position in top left corner
//in pdf files, cooridinates start in the left bottom corner
image.SetAbsolutePosition(0, sizeWithRotation.Height - image.ScaledHeight);
//in production, I use MemoryStream
//I put FileStream here to test the code in console application
using (var newFileStream = new FileStream("with_logo.pdf", FileMode.Create))
{
//setup PdfStamper
var stamper = new PdfStamper(oldFile, newFileStream);
//iterate through the pages in the original file
for (var i = 1; i <= oldFile.NumberOfPages; i++)
{
//get canvas for current page
var canvas = stamper.GetOverContent(i);
//add image with pre-set position and size
canvas.AddImage(image);
}
stamper.Close();
}
このコードは、ローカルファイルで動作するすべてのコードにあるインラインする画像を選択しないことも重要です。 私の(現実の)ケースでは、Base64文字列としてpdfファイルを受け取り、ローカルストレージからロゴを追加し、Base64文字列に変換してWebページに出力します。
ロゴに含まれる拡張子を制御するため、イメージを強制的にPNG形式で開きます(ハードコードされています)。必要に応じてダイナミックに画像フォーマットを設定することができます。
iText 7は.NET Coreをサポートしています。私は古いiTextSharpではなく、.NET Core用のiText 7を使用することをお勧めします。 –
iText7は、AGPLの条件または購入のいずれかで使用することができますが、どちらも私の状況では使用できません。しかし、それを指摘してくれてありがとう、私は自分の答えを変更します – XpyM
商用コンテキストでiTextを使いたいのでAGPLバージョンを使用できない場合は、現在使用しているバージョンを使用することはできません。 [Can iText 2.1.7/iTextSharp 4.1.6以前は市販されていますか?](https://developers.itextpdf.com/question/versions-older-than-5) –