![]() |
Форум visio.getbb.ru |
О форумах
Библиотека | Частые вопросы | Литература | Склад материалов Visio Navigator | Blog | Полезные ссылки | О сайте История Visio | Продукты Visio |
Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д. |
16.12.2016
08.12.2015
20.11.2015
19.11.2015
28.07.2015
17.03.2015
05.05.2014
26.01.2012
15.07.2009
15.05.2009
23.11.2005
Копирование и вставка в новую страницу в Visio 2002
Есть страница с планом помещений и расстановкой мебели. Копируем все и вставляем в новую страницу. При этом часть мебели улетает за пределы листа, часть остается, как и в оригинале, на своих местах, часть расползается по рисунку. Как победить это безобразие, чтобы все было на своих местах?
И правда летает! Мне понравилось! На первый взгляд причина кроется в том, что некоторые шейпы оказались привязанными к направляющим. Если копировать на другую страницу эти шейпы без направляющих, то им нечего подставить в формулу. Вот тут-то все и начинается. Если копировать все вместе с направляющими, выделив это по ctrl-A, то все копируется нормально и ничего не летает. Способ борьбы можно построить на основе того, что при смещении шейпа некоторые расчетные формулы меняются на числовые значения. То есть если выделить все нужные шейпы (в Вашем случае это правая половина листа) и клавишами сместить всю эту кучу на шаг вправо, а потом на шаг влево, то рисунок внешне не изменится. Но на самом деле вместо формул в нем будут уже числа. Пропадет и мешающая привязка. Если теперь скопировать несколько шейпов на другую страницу, то они уже не улетят.
Отображение данных шейпа в 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