У меня странная проблема на одном из производственных серверов. У нас есть архитектура, в которой мы интегрировали AX, используя веб-службы с .NET-приложением. Мы используем объекты System.IO для преобразования PDF-отчета в байты и отправки этой информации через веб-службы в приложение. Метод, который мы используем, работал до недавнего времени, когда мы начали видеть странные результаты. Байт-массив, возвращенный в производственной среде, отличался от остальной среды. Очевидно, что база кодов одинакова во всех средах. Байт-массив имел большое количество, примерно 47000, а остальные среды - около 3000. Это вызывает проблемы с созданием отчета в приложении.System.Byte [] дает неожиданное значение
Просто для добавления выше, отчет, о котором идет речь, представляет собой отчет AX SSRS об изделии и штрих-код. Отчет отлично печатается в клиенте AX. Но чтобы передать его веб-службам, отчет преобразуется в байты и отправляется в приложение, которое затем преобразует его обратно в изображение и отображает в пользовательском интерфейсе. Из-за разницы в байтах, возвращаемых при производстве, напечатанное изображение имеет номер позиции, но не штрих-код. Вместо штрих-кода отображается пустое пробел. Я проверил, что шрифты штрих-кода установлены на сервере SSRS, и если я печатаю отчет непосредственно в AX, он отлично печатает. Я знаю, что архитектура могла быть проще, но это то, что у меня есть на данный момент, и нужно заставить ее работать. Любая помощь будет оценена по достоинству. Благодарю.
static System.Byte[] test()
{
str _filePath = "C:\\Users\\Harry\\Desktop\\ABC.PDF";
System.Byte[] pdfBuffer;
System.IO.FileInfo fileInfo;
System.IO.FileStream fs;
int size;
Set permissionSet = new Set(Types::Class);
permissionSet.add(new FileIOPermission(_filePath,'r'));
permissionSet.add(new InteropPermission(InteropKind::ClrInterop));
CodeAccessPermission::assertMultiple(permissionSet);
//Load the file
fileInfo = new System.IO.FileInfo(_filePath);
//Initiallize the byte array by setting the length of the file
size = int642int(fileInfo.get_Length());
pdfBuffer = new System.Byte[size]();
// Stream the file
fs = new System.IO.FileStream(fileInfo.get_FullName(), System.IO.FileMode::Open, System.IO.FileAccess::Read);
fs.Read(pdfBuffer, 0, pdfBuffer.get_Length());
fs.Close();
fs.Dispose();
//Revert the access
CodeAccessPermission::revertAssert();
return pdfBuffer;
}
1. Шрифт, который генерирует штрих-код, отсутствует в рабочей среде или что средство визуализации SSRS не может его увидеть ... Например, происходит ли рендеринг в PDF на клиентской машине? Это возможно, так как в вашем примере кода показан путь к файлу как «C: \\ Users \\ Harry \\ Desktop \\ ABC.PDF», а не общий диск. 2. Если вы недавно установили шрифт штрих-кода, вам нужно будет [перезагрузить компьютер] (http://axcalated.blogspot.com.es/2014/09/custom-barcode-and-micr-fonts-on-ssrs. HTML). 3. См. [Нижний комментарий] (http://stackoverflow.com/questions/16318891/displaying-barcode-in-ssrs-report) –
4. Если рендеринг на сервере невозможен (1) попробуйте установить шрифт штрих-кода на ваш клиентский компьютер (и перезапустите!), а затем отрисуйте отчет как PDF еще раз. –
Эй, Яньсосо. Мы установили шрифт на сервере SSRS очень рано, но DID NOT перезапустили сервер как его производственный сервер. Это то, что требовалось! Мы сделали это, и это сработало. Шрифт штрих-кода отсутствовал на сервере SSRS. Большое спасибо за ваш ответ. – Harry