![]() |
Форум visio.getbb.ru | О форумах Библиотека | Частые вопросы | Литература | Склад материалов Visio Navigator | Blog | Полезные ссылки | О сайте История Visio | Продукты Visio |
Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д. |
08.08.2020  Exploring the Visio file johnvisiomvp.
21.08.2019  Visio PowerShell Saveen Reddy.
18.05.2016  Translating Visio VBA to PowerShell mike.
01.03.2013  VisioPS - Demo of Powershell Module to control Visio 2007 Saveen Reddy.
14.01.2010  How Can I Create a Windows Visio Drawing of My Workstations Disk Subsystem? ScriptingGuy.
12.01.2010  Can I Make a Microsoft Visio Drawing with Network Shapes and Symbols? ScriptingGuy.
11.01.2010  Is It Possible to Automate Microsoft Visio? ScriptingGuy.
Отображение данных шейпа в PDF
Существует ли возможность отобразить данные шейпа при конвертировании в PDF?
Это возможно, если у вас установлен Acrobat Standard. Ниже приведен пример файла Visio с макросом (см. источник). Макрос сохраняет документ в формате PDF в той же папке, затем читает данные шейпов на всех страницах и записывает их в виде комментариев в PDF.
Проверено в Visio 2013 Pro, Acrobat XI Standard, документ Visio в метрической системе.
2. Использование Acrobat - не единственная возможность. Существует множество библиотек, работающих с комментариями. Например, можно воспользоваться open-source PdfSharp.
Преобразование координат должно быть несложным. Внутренние единицы Visio - это дюймы, в PDF - точки, начало координат одинаковое (левый нижний угол). Поэтому формулы Visio_X*72, Visio_Y * 72 должны давать координаты X и Y в PDF.
Пример размещения комментариев есть в http://www.pdfsharp.net/wiki/Annotations-sample.ashx.
Ниже приведен скрипт powershell для добавления аннотаций с использованием рассмотренной выше методики (PdfSharp).
$visioFileName = $PSScriptRoot + "\demo\PdfNote.vsd"
$pdfFileName = $PSScriptRoot + "\demo\PdfNote.pdf"
Write-Host converting $visioFileName to $pdfFileName
# Load PdfSharp assembly
Add-Type -Path (Get-ChildItem -Filter PdfSharp.dll -Recurse $PSScriptRoot).FullName
# start Visio and open the document
$visio = New-Object -ComObject Visio.Application
$visio.Visible = $true
$visioDoc = $visio.Documents.Open($visioFileName)
# Export PDF, all pages
$visioDoc.ExportAsFixedFormat(1, $pdfFileName, 1, 0)
# Open exported PDF with PdfSharp
$pdfDoc = [PdfSharp.Pdf.IO.PdfReader]::Open($pdfFileName);
for ($i = 0; $i -lt $pdfDoc.PageCount; $i = $i + 1) {
$pdfPage = $pdfDoc.Pages[$i]
$visioPage = $visioDoc.Pages[1 + $i]
foreach ($visioShape in $visioPage.Shapes) {
# if comment exists
$comment = $visioShape.CellsU("Comment").ResultStr(0)
if ($comment) {
# add it as annotation
$x = $visioShape.CellsU("PinX").ResultIU - $visioShape.CellsU("Width").ResultIU / 2
$y = $visioShape.CellsU("PinY").ResultIU + $visioShape.CellsU("Height").ResultIU / 2
$annotation = New-Object PdfSharp.Pdf.Annotations.PdfTextAnnotation
$annotation.Title = $visioShape.Characters.Text
$annotation.Contents = $comment
$annotation.Icon = 6 # "note" icon
# inches to points
$point = New-Object PdfSharp.Drawing.XPoint(($x * 72), ($y * 72))
$size = New-Object PdfSharp.Drawing.XSize(0, 0)
$rect = New-Object PdfSharp.Drawing.XRect($point, $size)
$annotation.Rectangle = New-Object PdfSharp.Pdf.PdfRectangle($rect)
$pdfPage.Annotations.Add($annotation)
}
}
}
Источник (и подробности) - http://visguy.com/vgforum/index.php?topic=8581