【Aspose.CAD】印刷サイズの変換について

お世話になります。

Aspose.CADでDWGをPDFに変換する機能を作成しており,
その際に,
デフォルトの図面サイズから別の印刷サイズにサイズ変換したいと思っています。(例:A0→A4)

Aspose.CADで,図面サイズを変換できるAPIがあるかご教示頂けないでしょうか。
参考となるプログラムコードが載ったリンクなどあれば教えて頂ければ幸いです。

また,現在作っている機能では,
サイズ変換によって図面の表示サイズが変わってしまっており,Aspose.CADでは表示サイズを変えずにサイズ変換できるAPIはありますでしょうか。

以上,大変お手数ですがご確認頂きたくよろしくお願いいたします。

@morimori,
このページからCADNET-420およびCADNET-298の例を使用してみてください(それらを検索してください)。
Aspose.CAD for .NET 17.12 - Release Notes この例では、サイズの値を変更する必要があります。

@Oleksii.Gorokhovatskyi
ご返信ありがとうございます。
CADNET-420およびCADNET-298について確認いたしましたが,
私たちのコーディングを420,298と比較しましたが,コーディングは特に問題なさそうにと思っております。

現在,サイズ変換の機能は以下のコードで作成しておりますが,
どこの部分が良くないかご教示頂けないでしょうか。
なにか追加必要なコードなどありますでしょうか。

お手数をおかけしてしまい大変申し訳ございませんが,ご確認頂ければ幸いです。


||private bool _ConvertCadFileToPDF(string sheetName, ref bool isNotConvert)|||||||
|---|---|---|---|---|---|---|---|
||{|||||||
|||try||||||
|||{||||||
||||ArrayList layoutNames = new ArrayList();|||||
||||int page_size_num = -1;|||||
||||string direction = string.Empty;|||||
|||||||||
||||var cadImage = (CadImage)Aspose.CAD.Image.Load(_is3_input_filename_copy);|||||
|||||||||
||||CadLayoutDictionary layouts = cadImage.Layouts;|||||
|||||||||
||||// ファイルの中にレイアウトがないの時、エラーになる。|||||
||||if (layouts.Count == 0)|||||
||||{|||||
|||||_mylog.Error($"{"AutoCADファイルの中にレイアウトが存在していません。"}");||||
|||||_UpdateStatus("変換エラー");||||
|||||return false;||||
||||}|||||
|||||||||
||||// 全ページ/指定シートのチェック|||||
||||//if (string.IsNullOrEmpty(sheetName))|||||
||||//{|||||
|||||foreach (CadLayout layout in layouts.Values)||||
|||||{||||
||||||if (layout.LayoutName.ToUpper().StartsWith("VIEW", StringComparison.Ordinal))|||
||||||{|||
|||||||layoutNames.Add(layout.LayoutName);||
|||||||||
|||||||if (string.IsNullOrEmpty(direction))||
|||||||{||
||||||||direction = layout.MaxLimits.X > layout.MaxLimits.Y ? "横" : "縦";|
|||||||}||
||||||}|||
|||||}||||
||||//}|||||
||||//else|||||
||||//{|||||
||||//|layoutNames.Add(sheetName);||||
||||//}|||||
|||||||||
||||// ファイルの中に'View'レイアウトがないの時、結合しない。|||||
||||if (layoutNames.Count == 0)|||||
||||{|||||
|||||isNotConvert = true;||||
|||||return true;||||
||||}|||||
|||||||||
||||// 出力サイズの設定|||||
||||page_size_num = Convert.ToInt32(layoutNames[0].ToString().Substring(layoutNames[0].ToString().Length - 1));|||||
||||PaperSize pageSize = GetPageSizeCAD(cadImage, page_size_num);|||||
|||||||||
||||// シートの順番の設定|||||
||||layoutNames.Sort();|||||
|||||||||
||||var rasterizationOptions = new Aspose.CAD.ImageOptions.CadRasterizationOptions()|||||
||||{|||||
|||||Layouts = (string[])layoutNames.ToArray(typeof(string)),||||
|||||NoScaling = true,||||
||||                    //AutomaticLayoutsScaling = true,|||||
||||                    PageHeight = direction.Equals("横") ? pageSize.Height : pageSize.Width,|||||
||||                    PageWidth = direction.Equals("横") ? pageSize.Width : pageSize.Height,|||||
||||                    //UnitType = Aspose.CAD.ImageOptions.UnitType.Millimeter,|||||
||||| ||||
||||};|||||
|||||||||
||||cadImage.Save(_is3_output_filename,|||||
|||||new Aspose.CAD.ImageOptions.PdfOptions() { VectorRasterizationOptions = rasterizationOptions, Pc3File= @"\\o4isvs10\InnovatorSP9\Innovator\Data\図枠Form\TC図枠Form\OBL2_PLOT.pc3" });||||
|||||||||
||||return true;|||||
|||}||||||
|||catch (Exception ex)||||||
|||{||||||
||||_mylog.Error($"{"AutoCADファイルのPDF変換が失敗しました。"}, {ex.Message}");|||||
||||_UpdateStatus("変換エラー");|||||
||||throw;|||||
|||}||||||
||}|||||||
|||||||||
||/// <summary>|||||||
||/// CADのページサイズの取得|||||||
||/// </summary>|||||||
||/// <remarks>CADのページサイズを取得する。</remarks>|||||||
||private PaperSize GetPageSizeCAD(CadImage cadImage, int page_size_num)|||||||
||{|||||||
|||PaperSize pageSize = new PaperSize();||||||
|||string pageSizeName = string.Empty;||||||
|||||||||
|||switch (page_size_num)||||||
|||{||||||
||||case 0:|||||
|||||pageSizeName = "is3_PDF変換定数_CAD_A0";||||
|||||break;||||
||||case 1:|||||
|||||pageSizeName = "is3_PDF変換定数_CAD_A1";||||
|||||break;||||
||||case 2:|||||
|||||pageSizeName = "is3_PDF変換定数_CAD_A2";||||
|||||break;||||
||||case 3:|||||
|||||pageSizeName = "is3_PDF変換定数_CAD_A3";||||
|||||break;||||
||||case 4:|||||
|||||pageSizeName = "is3_PDF変換定数_CAD_A4";||||
|||||break;||||
||||default:|||||
|||||break;||||
|||}||||||
|||||||||
|||if (!string.IsNullOrEmpty(pageSizeName))||||||
|||{||||||
||||string[] arrSplit = _htVariable[pageSizeName].ToString().Split(',');|||||
||||pageSize.Height = Convert.ToInt32(arrSplit[0]);|||||
||||pageSize.Width = Convert.ToInt32(arrSplit[1]);|||||
|||}||||||
|||else||||||
|||{||||||
||||pageSize.Height = cadImage.Size.Height;|||||
||||pageSize.Width = cadImage.Size.Width;|||||
|||}||||||
|||||||||
|||return pageSize;||||||
||}|||||||
    indent preformatted text by 4 spaces
```sql

@morimori,
特定のサイズの結果を作成するには、次のようなものを適用する必要があります。

Boolean currentUnitIsMetric = IsMetric(image.getUnitType());

double currentUnitCoefficient = Coefficient(image.getUnitType());

if (currentUnitIsMetric)

{

double metersCoeff = 1 / 1000.0;

double scaleFactor = metersCoeff / currentUnitCoefficient;

vectorOptions.setPageWidth((float)(210 * scaleFactor));

vectorOptions.setPageHeight((float)(297 * scaleFactor));

vectorOptions.setUnitType(UnitType.Millimeter);

}

else

{

vectorOptions.setPageWidth((float)(8.27f / currentUnitCoefficient));

vectorOptions.setPageHeight((float)(11.69f / currentUnitCoefficient));

vectorOptions.setUnitType(UnitType.Inch);

}

private bool IsMetric(int initial)

{

Boolean isMetric = true;

switch (initial)

{

case UnitType.Inch:

case UnitType.MicroInch:

case UnitType.Mil:

case UnitType.Foot:

case UnitType.Yard:

case UnitType.Mile:

case UnitType.Unitless:

isMetric = false;

}

return isMetric;

}

private double Coefficient(int unitType)

{

double coefficient = 1.0;

switch (unitType)

{

case UnitType.Parsec:

coefficient = 3.0857 * 10000000000000000.0;

break;

case UnitType.LightYear:

coefficient = 9.4607 * 1000000000000000.0;

break;

case UnitType.AstronomicalUnit:

coefficient = 1.4960 * 100000000000.0;

break;

case UnitType.Gigameter:

coefficient = 1000000000.0;

break;

case UnitType.Kilometer:

coefficient = 1000.0;

break;

case UnitType.Decameter:

coefficient = 10.0;

break;

case UnitType.Hectometer:

coefficient = 100.0;

break;

case UnitType.Meter:

coefficient = 1.0;

break;

case UnitType.Centimenter:

coefficient = 0.01;

break;

case UnitType.Decimeter:

coefficient = 0.1;

break;

case UnitType.Millimeter:

coefficient = 0.001;

break;

case UnitType.Micrometer:

coefficient = 0.000001;

break;

case UnitType.Nanometer:

coefficient = 0.000000001;

break;

case UnitType.Angstrom:

coefficient = 0.0000000001;

break;

case UnitType.Inch:

coefficient = 1.0;

break;

case UnitType.MicroInch:

coefficient = 0.000001;

break;

case UnitType.Mil:

coefficient = 0.001;

break;

case UnitType.Foot:

coefficient = 12.0;

break;

case UnitType.Yard:

coefficient = 36.0;

break;

case UnitType.Mile:

coefficient = 63360.0;

break;

}

return coefficient;

}