안녕하세요
현재 Aspose.CAD for .NET(버전 25.7.0)을 사용하여 CAD 도면을 PDF 파일로 변환하고 있습니다.
제 목표는 'monochrome.ctb’플롯 스타일을 적용하여 출력이 흑백으로 표시되고 원래의 레이어 기반 선가중치가 올바르게 유지되도록 하는 것입니다.
몇 가지 질문이 있는데
- Aspose.CAD는 현재 내보내기 중에 실제 ‘monochrome.ctb’ 플롯 스타일 적용을 지원하나요?
- PDF로 내보낼 때 원본 레이어 기반 선가중치(AutoCAD에 정의된 대로)를 보존할 수 있는 방법이 있나요?
- 이 기능이 지원되지 않는 경우 가까운 시일 내에 지원될 예정인가요?
이 문제는 엔지니어링 도면 작업 흐름에 매우 중요하므로 이 문제에 대해 제공할 수 있는 설명이나 지침을 주시면 대단히 감사하겠습니다.
Aspose.CAD의 지원과 지속적인 개발에 감사드립니다.
@kdh0609
Cause
Aspose.CAD does support the application of plot styles like ‘monochrome.ctb’ during the conversion of CAD drawings to PDF. However, preserving layer-based line weights as defined in AutoCAD may require specific handling.
Solution
-
Applying ‘monochrome.ctb’: Ensure that you are correctly referencing the ‘monochrome.ctb’ file in your conversion settings. This will allow the output PDF to reflect the monochrome style.
-
Preserving Line Weights: To maintain the original layer-based line weights, you must set specific options in your conversion code. If this feature is not currently supported, an update from Aspose may be necessary.
Code
Here’s a basic example of how to set the plot style during conversion:
using Aspose.CAD;
using Aspose.CAD.ImageOptions;
// Load the CAD file
using (var cadImage = Image.Load("input.dwg"))
{
// Create PDF options
var pdfOptions = new CadRasterizationOptions
{
PlotStyle = "monochrome.ctb", // Specify the plot style
// Additional options can be set here
};
// Save as PDF
cadImage.Save("output.pdf", new PdfOptions { VectorRasterizationOptions = pdfOptions });
}
Next Steps
- Test the above code to confirm it meets your requirements for monochrome output and line weight preservation.
- If you encounter issues with line weights, check the Aspose.CAD documentation for any updates or reach out to Aspose support for further assistance regarding feature requests.
Please let me know if you need any further assistance!
Sources:
저한테는 PlotStyle 에 대한 정의가 없다고 뜹니다.
@kdh0609,
안녕하세요,
ctb 파일을 도면 파일 근처에 넣어주시면 적용됩니다. 또는 여기에 설명된 대로 옵션을 통해 불러올 수도 있습니다. 만약 문제가 발생할 경우, 코드 샘플, 초기 파일, ctb 파일을 첨부해 주시면 저희가 이 문제를 재현하고 조사할 수 있도록 하겠습니다.
// CAD 파일을 로드
using (var cadImage = (Aspose.CAD.Image)Aspose.CAD.Image.Load(txtCad.Text))
{
// PDF 변환 옵션 설정
var rasterizationOptions = new CadRasterizationOptions
{
PageSize = cadImage.Size,
AutomaticLayoutsScaling = true,
NoScaling = false,
CtbSources = new Dictionary<string, Stream>()
{
{ ctbFile, File.OpenRead(ctbFile) } // Ctb 파일 경로
}
};
var pdfOptions = new PdfOptions
{
VectorRasterizationOptions = rasterizationOptions
};
// 메모리 스트림에 저장
using (MemoryStream pdfStream = new MemoryStream())
{
cadImage.Save(pdfStream, pdfOptions);
pdfStream.Position = 0;
// PDF 미리보기
pdfViewer1.LoadDocument(pdfStream);
// 저장용 스트림 보존
mPdf = new MemoryStream(pdfStream.ToArray());
}
}
monochrome.zip (3.2 KB)
이렇게 해도 처리가 안됩니다.
저는 스트림에 저장해두고 미리 보여준 다음, 저장을 할 수 있도록 구현해놓은 상태입니다.
초기파일은 공유가 불가능해서 이렇게만 일단 보여드립니다.
도움 부탁드립니다.
@kdh0609,
초기 DWG 파일이 없으면 CTB 파일을 사용하는지 확인할 수 없고, 파일을 올바르게 읽는지 확인할 수도 없습니다.
예를 들어, Redline.dwg 파일은 모든 색상을 검은색으로 변환하는 monochrome.ctb 파일을 참조합니다.
다음은 예시입니다.
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load("redline.dwg"))
{
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
rasterizationOptions.DrawType = CadDrawTypeMode.UseObjectColor;
rasterizationOptions.Layouts = new string[] { "Model" };
PdfOptions pdfOptions = new PdfOptions();
pdfOptions.VectorRasterizationOptions = rasterizationOptions;
cadImage.Save("output.pdf", pdfOptions); }
monochrome.ctb 파일이 없으면 PDF는 빨간색 선으로 생성되고, DWG 파일 근처에 CTB 파일이 있으면 이 예제는 CTB 파일에서 가져온 검은색 선으로 PDF를 생성합니다.
다음 코드 예제도 같은 방식으로 작동합니다.
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load("redline.dwg"))
{
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
rasterizationOptions.DrawType = CadDrawTypeMode.UseObjectColor;
rasterizationOptions.Layouts = new string[] { "Model" };
rasterizationOptions.CtbSources = new Dictionary<string, Stream>()
{
{ "monochrome.ctb", File.OpenRead("monochrome.ctb") }
};
PdfOptions pdfOptions = new PdfOptions();
pdfOptions.VectorRasterizationOptions = rasterizationOptions;
cadImage.Save("output.pdf", pdfOptions);
}
redline.zip (24.7 KB)
예시 파일 감사합니다.
하지만, 예시 파일을 검은색으로 변환하려고 해도 변환이 잘 되지 않는 것을 확인했습니다.
‘monochrome.ctb’ 파일은 다른 프로세스에서 사용 중이므로 프로세스에서 액세스할 수 없습니다.
라는 오류가 계속 뜹니다.
‘DWG 파일 근처에 CTB 파일이 있으면’ 이 부분에서 잘못된 게 아닐까 싶은데 혹시 저게 어떤 의미인지 알려주실 수 있나요? 저는 현재 같은 폴더에 ctb 파일과 dwg 파일이 같이 있습니다.
SAMPLE.zip (75.3 KB)
샘플파일입니다.
이걸로 확인 부탁드리겠습니다!
글씨는 굵게 나오면 안되고, 제품의 외곽선이 두껍게 나와야 한다고 합니다.
@kdh0609,
안녕하세요.
오류가 발생하면 스크린샷을 첨부해 주시면 저희가 직접 확인할 수 있도록 도와드리겠습니다.
1.Monochrome.ctb 파일은 모든 색상을 검은색으로 변경하며 선 두께나 글꼴에는 영향을 미치지 않습니다. 따라서 예제를 실행하여 검은색 이미지를 얻으면 CTB 파일이 예상대로 적용됩니다.
또한, 기본적으로 색상은 검은색으로만 설정됩니다(rasterizationOptions.DrawType/rasterizationOptions.DrawColor에서 설정).
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
2.도면 테두리의 선 두께는 0.4mm이며 레이어에 설정되어 있습니다. 이 너비는 출력 PDF에 그대로 유지되며, PDF 뷰어에서 측정 도구를 사용하여 확인할 수 있습니다. 캔버스 크기는 다음과 같이 설정할 수 있습니다.
rasterizationOptions.PageHeight = 2000;
rasterizationOptions.PageWidth = 2000;
두 경우 모두 결과의 선 두께는 도면에 설정된 0.4mm에 해당합니다.
3.글꼴 보기는 도면에 사용된 글꼴과 시스템에 설치된 글꼴에 따라 달라집니다. 도면의 기본 글꼴은 DotumChe이며, 변환 시 적용되도록 설치해야 합니다. 현재 AutoCAD의 초기 파일과 결과 PDF 사이에는 오류가 없습니다.
결과 PDF에서 잘못된 부분이나 변경해야 할 부분을 직접(예: 스크린샷) 지적해 주세요.
SAMPLE.zip (768.1 KB)
보내주신 코드 실행해보았으나, 저희가 원하는대로 도면이 pdf 변환되지 않고 있습니다.
원래의 색상에 선 두께의 가중치가 부여되어있고, 흑백으로 변환할 때 선의 가중치에 맞게 선의 두께가 달라지기를 희망합니다.
글꼴은 굵게 표현되면 안되고
image.png (813 바이트)
도면의 제품의 테두리는 굵게 표현되어야 합니다. (선 가중치에 따라)
image.png (1.7 KB)
관련 스크린샷 첨부드립니다.
ctb파일을 같이 실행시켜야 할 거 같은데, ‘DWG 파일 근처에 CTB 파일이 있으면’ 이거에 대해 '근처에 있다’는 게 정확히 어떤 의미인지 답변 부탁드리겠습니다!
@kdh0609,
"근처"는 제 프로젝트 예시처럼 DWG 파일 근처를 의미합니다. 또는 스트림으로 제공될 수도 있습니다.
귀하 측에서 PDF 결과를 첨부해 주시기 바랍니다.
줄과 글꼴의 선 굵기는 다른 문제입니다.
CTB 파일은 선 두께에 영향을 미치지 않습니다. 스크린샷을 보시면 도면에 사용된 빨간색의 경우 선 두께는 CTB 파일이 아닌 도면에서 가져옵니다.
monochrome_red.png (27.8 KB)
원형 부분의 선 두께는 도면에 명시된 대로 0.4mm입니다. PDF 캔버스 크기가 작으면 배율이 줄어들기 때문에 “굵게” 보일 수 있지만, 선 두께는 여전히 0.4mm이므로 “굵게” 보일 수 있습니다.
line_width.png (51.0 KB)
내보내기 전에 선의 너비를 늘리면 도움이 될 수 있습니다.
foreach (CadLayerTable layer in cadImage.Layers)
{
if (layer.LineWeight > 0)
{
layer.LineWeight *= 5;
}
}
현재 변환되는 pdf 와, 변한이 되어야 하는 모습의 pdf 파일 함께 첨부드리겠습니다.
ddd.pdf (585.9 KB)
result 파일처럼 pdf 변환이 되어야 합니다.
result.pdf (201.5 KB)
선의 너비를 늘리는 것은 도움이 되지 않았습니다.
@kdh0609,
현재로서는 이 결과가 우리가 달성할 수 있는 최선입니다.
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load("SAMPLE.dwg"))
{
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
rasterizationOptions.DrawType = CadDrawTypeMode.UseObjectColor;
rasterizationOptions.PageHeight = 210;
rasterizationOptions.PageWidth = 297;
rasterizationOptions.Quality.TextThicknessNormalization = true;
rasterizationOptions.Layouts = new string[] { "Model" };
PdfOptions pdfOptions = new PdfOptions();
pdfOptions.VectorRasterizationOptions = rasterizationOptions;
cadImage.Save("output.pdf", pdfOptions);
}
output.pdf (595.0 KB)
우리 폰트가 원하는 예시보다 약간 더 굵어 보이긴 하지만, 당신 샘플에서는 폰트가 삼각형 형태로 처리되어 있어서(우리는 다른 방식으로 내보내기함) 더 얇게 보이는 것 같아요.
노력해주셔서 감사합니다.
그런데, PageHeight와 PageWidth 옵션의 값을 하드코딩하면 여러 크기의 도면을 변환할 때 문제가 되지 않나요?
저는 지금 메모리 스트림에 저장해두고 미리보기로 PDF 파일을 보여준 후,
사용자가 원할 때 PDF 파일로 저장을 시켜주고 있는데
어째서인지 PDF 파일을 미리보기할 때 각각 도면의 크기도 너무 다르고 안 보이는 도면도 있습니다.
@kdh0609,
까다로운 질문이므로 작업하는 도면의 종류(및 도면의 측정 단위)에 따라 가장 적합한 전략을 선택해야 합니다. 어떤 고객은 항상 A4 크기로 확대/축소하는 반면, 어떤 고객은 동적으로 확대/축소를 선택하거나, 어떤 고객은 값을 직접 입력하기도 합니다.
PageHeight/PageWidth를 설정하지 않으면 도면 크기(cadImage.Height/Width)에 따라 자동으로 정의됩니다. PageHeight/PageWidth는 1x1처럼 매우 작게 보이거나 DWG/DXF에서는 무한대로 보일 수 있으므로 설정하는 것이 좋습니다.
답변 감사합니다.
그런데,
당신 샘플에서는 폰트가 삼각형 형태로 처리되어 있어서(우리는 다른 방식으로 내보내기함) 더 얇게 보이는 것 같아요.
이 말이 혹시 어떤 의미일까요?
사용자한테 물어보니, 폰트는 기존처럼 유지되어야 한다고 합니다.
@kdh0609,
“result.pdf” 파일의 글꼴이 얇은 이유를 추측해 본 것입니다. (확대해서 보면) 기호들이 삼각형으로 표현된 것을 확인할 수 있습니다.
triangulation.png (22.9 KB)
확인했습니다.
하지만, 글꼴은 기본 '돋음체’를 사용하고 있다고 하는데
왜 저렇게 표현이 되어있는 건가요?
image.png (17.4 KB)
이런 형태로 플롯을 지정한다고 합니다.
혹시 여기에서 무언가 옵션을 설정해줘야 하는 부분이 있을까요?
@kdh0609,
"result.pdf"를 얻기 위해 어떻게 내보냈나요?
위에 첨부한 이미지(“image.png”)대로 하고, 영역만 설정한 후 '확인’버튼을 누르면 "result.pdf"처럼 출력이 되는 형식입니다.