此dwg文件转换成PDF时,提示以下异常信息,aspose.CAD 版本为26.1.0
Aspose.CAD.CadExceptions.ImageSaveException: Image export failed. Error during PDF export: Value cannot be null. (Parameter ‘s’)
—> System.Exception: Error during PDF export: Value cannot be null. (Parameter ‘s’)
—> System.ArgumentNullException: Value cannot be null. (Parameter ‘s’)
at System.ArgumentNullException.Throw(String paramName)
at #=z7_FvG92hKEraRUKINdU1wuQf9dpri_dFSbfSUYuzNM4uC1wqex_9OVwiKdXbYbjuzSOw1fY=.#=zU6PeucIyDggI(String #=zdRx_Kkw=, CodePages #=zPNi1t2U0e0cY)
at #=zh5cWUO1uVga7XfwbSs5qcAj1hDOp_1GKlxXWGk1nE7k3WW_md8xuZyct179aMLLqnQ==.#=zP0Dl5ng=(#=zrPy6Av_qEiiyBXLQaIB9SAvVyg9OjBJEpyqnzclqc585 #=z1kEGWEtK48XaN0UOWg==, String #=zt1tu4jw=, String #=zZlQukRM=)
at #=zh5cWUO1uVga7XfwbSs5qcAj1hDOp_1GKlxXWGk1nE7k3WW_md8xuZyct179aMLLqnQ==.#=z$f8aH0dUliUY(#=zrPy6Av_qEiiyBXLQaIB9SAvVyg9OjBJEpyqnzclqc585 #=z1kEGWEtK48XaN0UOWg==, #=zGgEdSY5Rt8Xta$q4Lko7z8eAoBmVNyssMmjtsGquxTj8A2xliOW1I2wDr3BG #=zlkxdYCmITvvW, String #=zt1tu4jw=, String #=zZlQukRM=, Double #=zGkv4_NRM64Uo, #=z9bjsVNvT$YlYv9jbnU5nAIUe3Y6LxOzXrikMJKbCwdjxP7dbjgKBW$s$nWReGvR1cJ8wRd0= #=z3gN7dbsmFzdF, Boolean #=zDhUOceeTduAyZE6Qvw==)
at #=zj5sKctRZpShUhVNHpu5l7JvfLO6sZeqI0_gXC9GF3xr7qQwmsKb95ymYqaLdeEQ_SSp8fGmoeCZsRUnG8jBEyrZEJknh.#=z0$s$U8=(#=z9v$LQuV0wIZJwxU2zz4ROftL205hlp4g694kT12RtxHfNF0RXov1yYg= #=zVi3Mx6CsrmdzT7Ar2848Sbo=, #=ziwHP6xJoqaedf1xKpLV_p3OLpHHym_UNmJ3cvieLYPo3 #=zn1XQ_nw=, #=zGgEdSY5Rt8Xta$q4Lko7z8eAoBmVNyssMmjtsGquxTj8A2xliOW1I2wDr3BG #=z0$d_1MHGvZJh, #=z9bjsVNvT$YlYv9jbnU5nAIUe3Y6LxOzXrikMJKbCwdjxP7dbjgKBW$s$nWReGvR1cJ8wRd0= #=zwuCoapWHJP90)
at #=zj5sKctRZpShUhVNHpu5l7JvfLO6sZeqI0_gXC9GF3xr7qQwmsKb95ymYqaLdeEQ_SSp8fGmoeCZsRUnG8jBEyrZEJknh.#=zF3Q7gWl8Cwem(CadEntityBase #=zdI5t2zc=, #=z9v$LQuV0wIZJwxU2zz4ROftL205hlp4g694kT12RtxHfNF0RXov1yYg= #=zVi3Mx6CsrmdzT7Ar2848Sbo=, #=zGgEdSY5Rt8Xta$q4Lko7z8eAoBmVNyssMmjtsGquxTj8A2xliOW1I2wDr3BG #=zlkxdYCmITvvW, #=znQ8j_iYA5UeKhExBDdgIJhKWgbp9IU49jQEUMptkjIkc #=zlqnVOTREZkA1, #=zGgEdSY5Rt8Xta$q4Lko7z8eAoBmVNyssMmjtsGquxTj8A2xliOW1I2wDr3BG #=z0$d_1MHGvZJh, #=z9bjsVNvT$YlYv9jbnU5nAIUe3Y6LxOzXrikMJKbCwdjxP7dbjgKBW$s$nWReGvR1cJ8wRd0= #=zwuCoapWHJP90, String& #=zhRkzCJBPsyb6, String& #=zQxrtEGORlGge)
at #=zj5sKctRZpShUhVNHpu5l7JvfLO6sZeqI0_gXC9GF3xr7qQwmsKb95ymYqaLdeEQ_SSp8fGmoeCZsRUnG8jBEyrZEJknh.#=z0K2yVEA=(CadEntityBase #=zdI5t2zc=, #=z9v$LQuV0wIZJwxU2zz4ROftL205hlp4g694kT12RtxHfNF0RXov1yYg= #=zVi3Mx6CsrmdzT7Ar2848Sbo=, #=zGgEdSY5Rt8Xta$q4Lko7z8eAoBmVNyssMmjtsGquxTj8A2xliOW1I2wDr3BG #=zlkxdYCmITvvW)
at #=zEYTIRSQnMShyt5MWfmE3oqcKZR6ZZlNaGR_ekriLwPFimFeQ9a6_b36L0caBGczxj2X7FvAPdE886psCEokYu3w=.#=zN$$WqW_68UWy(CadEntityBase #=zdI5t2zc=, #=z9v$LQuV0wIZJwxU2zz4ROftL205hlp4g694kT12RtxHfNF0RXov1yYg= #=zVi3Mx6CsrmdzT7Ar2848Sbo=, #=zGgEdSY5Rt8Xta$q4Lko7z8eAoBmVNyssMmjtsGquxTj8A2xliOW1I2wDr3BG #=zlkxdYCmITvvW)
at #=z9v$LQuV0wIZJwxU2zz4ROftL205hlp4g694kT12RtxHfNF0RXov1yYg=.#=zEOD7P$qPAUj_gQwTpIjtgKy_QqFs.MoveNext()
at #=z9v$LQuV0wIZJwxU2zz4ROftL205hlp4g694kT12RtxHfNF0RXov1yYg=.#=ztRy9_P_msnACSt_HQ1u8EKM5vLtR.MoveNext()
at #=z9v$LQuV0wIZJwxU2zz4ROftL205hlp4g694kT12RtxHfNF0RXov1yYg=.#=zX7c3t4YHPFPQJVEJOtoKEGE=.MoveNext()
at #=zfrEAY6ZNcDqi20EpXapyzByF4husL_nlmLtLoqsAjzZAgoPxLW0eWJ_V8aeLkTVSKA==.#=zlxVUg$SInOTDK9G6_g==(#=zM1c8N4VVkQgHlDod$4XPfxY$Xcp #=z5JQMuPB8l5A7, #=zFHGliRFtsTDf9EZl4lomVvk= #=z3bXH5hs=, #=zCCp9XhBCFilm1skIAuZkLT0= #=zp50ALsmYVP15, #=zCCp9XhBCFilm1skIAuZkLT0= #=zdwS0svtsudI3, #=zM2VCt4hignCRVosXTMpSEEnSBlrlr2jrDbZJRIiC2QzOuCe7nA== #=zQQwIJCDuFRGB9Gm1WQ==, Int32 #=zuXxegIUy32mI, ImageOptionsBase #=zVUkHceI=, #=z1FkZheahSQGRIbXcNx7tpgA= #=zM5vJXa$cMzqI, #=z5gmXdAm1wHUshVvFoHBgm44= #=z9nFWZo0=)
at #=zHt$j_kA7hCbfLcr$wIfTmHMWLrCHtdmZhFj4XON7u1zZ95og2EHEZAH5VmvNE9sImg==.#=z0K2yVEA=(Image #=zo3ZQW18=, Stream #=z9Sw5I4o=, ImageOptionsBase #=zVUkHceI=, Rectangle #=zQVqNfHvQ4mSK)
— End of inner exception stack trace —
at #=zHt$j_kA7hCbfLcr$wIfTmHMWLrCHtdmZhFj4XON7u1zZ95og2EHEZAH5VmvNE9sImg==.#=z0K2yVEA=(Image #=zo3ZQW18=, Stream #=z9Sw5I4o=, ImageOptionsBase #=zVUkHceI=, Rectangle #=zQVqNfHvQ4mSK)
at Aspose.CAD.Image.#=zr0$wc9geg0KPGALuFt3Ef9M=.#=zoSFfN3FqXsHtmNGeEw==(CancellationToken #=zZa3b4GQ=)
at #=z$fQuQoBkXd9hvO$5ceupbRM=.#=zvK0Q7PjR5wb2H34aHw==.#=zxiIgqOmi1BdKV9GYydBGFbc=()
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
— End of stack trace from previous location —
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
— End of stack trace from previous location —
at Aspose.CAD.Image.#=zVHElS9$2GYLkaRuetQ==.MoveNext()
— End of inner exception stack trace —
at Aspose.CAD.Image.#=zVHElS9$2GYLkaRuetQ==.MoveNext()
— End of stack trace from previous location —
at Aspose.CAD.Image.#=zrr20xmXTYz1GnhuE5g==.MoveNext()
— End of stack trace from previous location —
TKMF.dwg.zip (522.6 KB)
@PangXiaogang,
您好,
以下是我在 26.1 版本中测试有效的示例,结果附在附件中:
using (CadImage image = (CadImage)Aspose.CAD.Image.Load(fileName))
{
var rasterizationOptions = new CadRasterizationOptions()
{
PageWidth = 1000,
PageHeight = 1000,
};
var options = new PdfOptions
{
VectorRasterizationOptions = rasterizationOptions
};
image.Save("output.pdf", options);
}
能否请您分享一下导出代码,或者在您那边验证一下这段代码?操作系统是什么?
output.pdf (3.0 MB)
using (CadImage image = (CadImage)Aspose.CAD.Image.Load(fileName))
{
var rasterizationOptions = new CadRasterizationOptions
{
// // 高分辨率设置
// PageWidth = 1600,
// PageHeight = 1600,
PageWidth = 0,
PageHeight = 0,
// 布局和缩放设置
AutomaticLayoutsScaling = true,
NoScaling = false,
// ContentAsBitmap = true,
// 图形质量设置
DrawType = CadDrawTypeMode.UseObjectColor, // 使用对象颜色
BackgroundColor = Color.Black,
Layouts = ["Model"],
};
RasterizationQuality quality = new RasterizationQuality();
GraphicsOptions graphicsOptions = new GraphicsOptions();
switch (_quality)
{
case CADConvertQuality.High:
quality.Text = RasterizationQualityValue.High;
quality.Hatch = RasterizationQualityValue.High;
quality.Arc = RasterizationQualityValue.High;
quality.Ole = RasterizationQualityValue.High;
quality.ObjectsPrecision = RasterizationQualityValue.High;
graphicsOptions.SmoothingMode = SmoothingMode.HighQuality;
graphicsOptions.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
graphicsOptions.InterpolationMode = InterpolationMode.HighQualityBicubic;
break;
case CADConvertQuality.Medium:
quality.Text = RasterizationQualityValue.Medium;
quality.Hatch = RasterizationQualityValue.Medium;
quality.Arc = RasterizationQualityValue.Medium;
quality.Ole = RasterizationQualityValue.Medium;
quality.ObjectsPrecision = RasterizationQualityValue.Medium;
graphicsOptions.SmoothingMode = SmoothingMode.Default;
graphicsOptions.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
graphicsOptions.InterpolationMode = InterpolationMode.Default;
break;
case CADConvertQuality.Low:
quality.Text = RasterizationQualityValue.Low;
quality.Hatch = RasterizationQualityValue.Low;
quality.Arc = RasterizationQualityValue.Low;
quality.Ole = RasterizationQualityValue.Low;
quality.ObjectsPrecision = RasterizationQualityValue.Low;
graphicsOptions.SmoothingMode = SmoothingMode.HighSpeed;
graphicsOptions.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
graphicsOptions.InterpolationMode = InterpolationMode.Low;
break;
}
rasterizationOptions.Quality = quality;
rasterizationOptions.GraphicsOptions = graphicsOptions;
// 创建PDF选项
var pdfOptions = new PdfOptions
{
VectorRasterizationOptions = rasterizationOptions
};
if (!string.IsNullOrEmpty(waterMarkText))
{
pdfOptions.UserWatermarkText = waterMarkText;
pdfOptions.UserWatermarkColor = Color.FromArgb(30, 0, 0, 0);
}
image.Save("output.pdf", pdfOptions);
}
操作系统为windows Server 2019,netcore 8
是不是服务器系统缺少对应的字体造成的?如果是的话,能否使用默认字体转换,不要出错。
@PangXiaogang,
如果缺少所需的字体,我们会根据不同的操作系统使用内部默认字体。
请问您那边能否确认一下,额外设置一下是否有帮助:
cadImage.DefaultFont = "Arial";
请问在导出之前移除代理实体是否能解决这个问题?
List<CadEntityBase> toRemove = new List<CadEntityBase>();
foreach (CadEntityBase entityBase in cadImage.Entities)
{
if (entityBase.TypeName == CadEntityTypeName.ACAD_PROXY_ENTITY)
{
toRemove.Add(entityBase);
}
}
foreach (CadEntityBase entityBase in toRemove)
{
cadImage.TryRemoveEntity(entityBase);
}
请您再确认一下,图片加载是否像我们上面的示例一样,没有使用 LoadOptions 和编码(例如,没有 loadOptions.SpecifiedEncoding = CodePages.SimpChinese)。
List toRemove = new List();
foreach (CadEntityBase entityBase in cadImage.Entities)
{
if (entityBase.TypeName == CadEntityTypeName.ACAD_PROXY_ENTITY)
{
toRemove.Add(entityBase);
}
}
foreach (CadEntityBase entityBase in toRemove)
{
cadImage.TryRemoveEntity(entityBase);
}
当转换前添加以上代码(移除代理实体),可以正常导出。导出的PDF是否会缺失相应的实体?这段代码是否会影响其它正常DWG文件导出的PDF?
@PangXiaogang,
是的,在这种情况下,代理实体不会显示。但问题并非直接出在代理实体上,其他带有文本的实体也可能出现此问题,我要求您移除它们只是为了验证问题所在。问题与文件加载时的编码设置有关。如果您在加载时不使用编码,导出现在就能成功(不会丢失实体)。我们将在 Aspose.CAD 26.4 版本中修复此问题(但无法保证),因此即使启用了编码选项,问题也能得到解决。
var options = new LoadOptions
{
SpecifiedEncoding = CodePages.SimpChinese,
SpecifiedMifEncoding = MifCodePages.SimpChinese,
// UnloadOnDispose = true,
RecoverMalformedCifMif = true,
// VectorizationOptions = new VectorizationOptions()
};
Image image = Image.Load(inputFilePath, options)
在实际代码中已经添加了编码设置(在提问未体现)。不知道这些代码,是否对解决此问题有用。
另外,从客户的反馈得知,此文件是由三维图纸转换而来。或许对修复问题有帮助。
好的,期待新版本的发布。