首先,我先贴下我编写的代码,然后在末尾说明问题吧:
/// <summary>
/// 为pdf添加水印
/// </summary>
/// <param name="DocuementFileName">文档名称</param>
/// <param name="SaveFileName">保存后的名称</param>
/// <param name="WaterMarkContent">水印文本</param>
/// <param name="WaterMarkOpactiyNum">不透明度</param>
/// <param name="WaterMarkRotateDegNum">旋转角度</param>
/// <param name="WaterMarkHorAlign">水平对齐方式</param>
/// <param name="WaterMarkVerAlign">垂直对齐方式</param>
/// <param name="WaterMarkFontColor">字体颜色</param>
/// <param name="WaterMarkFontName">字体名称</param>
/// <param name="WaterMarkFontSize">字体大小</param>
public static void AddWaterMark2Pdf(
string DocuementFileName,
string SaveFileName,
string WaterMarkContent,
float WaterMarkOpactiyNum,
string WaterMarkRotateDegNum,
int WaterMarkHorAlignIndex,
int WaterMarkVerAlignIndex,
System.Drawing.Color WaterMarkFontColor,
string WaterMarkFontName = "宋体",
float WaterMarkFontSize = 12,
string AddImageFileName = "",
string AddImageHeight = "100",
string AddImageWidth = "100",
bool FullScreenMode = false,
int WaterDmi_Hor = 25,
int WaterDmi_Ver = 25,
bool CustomPostion = false,
double CustomPostion_X = 0,
double CustomPostion_Y = 0)
{
using Aspose.Pdf.Document TempLoadDocument = new Aspose.Pdf.Document(DocuementFileName);
#region foreach添加水印
foreach (Aspose.Pdf.Page TempPage in TempLoadDocument.Pages)
{
double PageWidth = TempPage.Rect.Width;
double PageHeight = TempPage.Rect.Height;
int PageRow = (int)(PageHeight / WaterDmi_Hor);
int PageCol = (int)(PageWidth / WaterDmi_Ver);
if (!string.IsNullOrEmpty(AddImageFileName))
{
lock (TempPage)
{
if (FullScreenMode)
{
for (int i = 0; i <= PageRow; i++)
{
for (int j = 0; j <= PageCol; j++)
{
WatermarkArtifact TempAddArtifact = new WatermarkArtifact();
TempAddArtifact.ArtifactHorizontalAlignment = GetHorizontalAlignment(
WaterMarkHorAlignIndex);
TempAddArtifact.ArtifactVerticalAlignment = GetVerticalAlignment(
WaterMarkVerAlignIndex);
TempAddArtifact.Rotation = Convert.ToInt32(WaterMarkRotateDegNum);
TempAddArtifact.Opacity = WaterMarkOpactiyNum;
TempAddArtifact.IsBackground = false;
TempAddArtifact.SetImage(AddImageFileName);
TempAddArtifact.Position = new Aspose.Pdf.Point(j * WaterDmi_Hor, i * WaterDmi_Ver);
lock (TempAddArtifact)
{
TempPage.Artifacts.Add(TempAddArtifact);
}
}
}
}
else
{
ImageStamp TempAddArtifact = new ImageStamp(AddImageFileName)
{
Opacity = WaterMarkOpactiyNum,
RotateAngle = Convert.ToInt32(WaterMarkRotateDegNum),
Width = double.Parse(AddImageWidth),
Height = double.Parse(AddImageHeight),
HorizontalAlignment = GetHorizontalAlignment(WaterMarkHorAlignIndex),
VerticalAlignment = GetVerticalAlignment(WaterMarkVerAlignIndex),
XIndent = 100,
YIndent = 100
};
TempPage.AddStamp(TempAddArtifact);
}
}
}
//没有图片就用文字水印
else
{
lock (TempPage)
{
WatermarkArtifact TempAddArtifact = new WatermarkArtifact();
TextState TempTextState = new TextState
{
Font = FontRepository.FindFont(WaterMarkFontName),
FontSize = WaterMarkFontSize,
ForegroundColor =
Aspose.Pdf.Color
.FromArgb(WaterMarkFontColor.R, WaterMarkFontColor.G, WaterMarkFontColor.B)
};
TempAddArtifact.SetTextAndState(WaterMarkContent, TempTextState);
TempAddArtifact.ArtifactHorizontalAlignment = GetHorizontalAlignment(WaterMarkHorAlignIndex);
TempAddArtifact.ArtifactVerticalAlignment = GetVerticalAlignment(WaterMarkVerAlignIndex);
TempAddArtifact.Rotation = Convert.ToInt32(WaterMarkRotateDegNum);
TempAddArtifact.Opacity = WaterMarkOpactiyNum;
TempAddArtifact.IsBackground = false;
if (CustomPostion)
{
TempAddArtifact.Position = new Aspose.Pdf.Point(CustomPostion_X, CustomPostion_Y);
}
lock (TempAddArtifact)
{
if (FullScreenMode)
{
for (int i = 0; i <= PageRow; i++)
{
for (int j = 0; j <= PageCol; j++)
{
TempAddArtifact.Position = new Aspose.Pdf.Point(
j * WaterDmi_Hor,
i * WaterDmi_Ver);
TempPage.Artifacts.Add(TempAddArtifact);
Debug.WriteLine($"已经添加第{i}行第{j}列的水印...");
}
}
}
else
{
TempPage.Artifacts.Add(TempAddArtifact);
}
}
}
}
}
#endregion
TempLoadDocument.Save(SaveFileName, Aspose.Pdf.SaveFormat.Pdf);
}
private static Aspose.Pdf.HorizontalAlignment GetHorizontalAlignment(int index)
{
return index switch
{
0 => Aspose.Pdf.HorizontalAlignment.None,
1 => Aspose.Pdf.HorizontalAlignment.Left,
2 => Aspose.Pdf.HorizontalAlignment.Center,
3 => Aspose.Pdf.HorizontalAlignment.Right,
4 => Aspose.Pdf.HorizontalAlignment.Justify,
5 => Aspose.Pdf.HorizontalAlignment.FullJustify,
_ => Aspose.Pdf.HorizontalAlignment.None,
};
}
private static Aspose.Pdf.VerticalAlignment GetVerticalAlignment(int index)
{
return index switch
{
0 => Aspose.Pdf.VerticalAlignment.None,
1 => Aspose.Pdf.VerticalAlignment.Top,
2 => Aspose.Pdf.VerticalAlignment.Center,
3 => Aspose.Pdf.VerticalAlignment.Bottom,
_ => Aspose.Pdf.VerticalAlignment.None,
};
}
第一个问题:使用24.9.0版本可以用上述代码,批量添加多个水印,也就是文字水印那块,但是升级到了最新版本以后,好像就添加不了了,同一份文档都是只有一个水印了,是不是代码写的有问题?
第二个问题:对于使用word编辑导出的pdf文件,添加水印设置透明度是生效的,但是好像对于cdr导出的pdf,添加水印就是不起作用的,透明度设置到0.5看起来都像是为1的状态,将这个cdr的pdf转为word,重新转为pdf,透明度就正常了,帮忙看看是什么问题
这是第二个问题的相关文档附件,已标注说明由什么方式导出:
Aspose.Pdf的问题文档.zip (2.0 MB)