Pardeep singh from Chandigarh Ответов: 2

Генерация pdf-файла и отображение изображений и данных в формате pdf из базы данных sql server в классическом asp


привет всем, пожалуйста, помогите мне, я сгенерировал pdf с помощью хранимой процедуры и классического asp, что я хочу показать изображение в pdf с помощью хранимой процедуры

Мой код для генерации pdf работает нормально, и это здесь:
Код страницы ASP:--

<%@ Language=VBScript % & gt;

&низкотемпературный;%

Установите cn = сервер.CreateObject ("ADODB. Connection")
константный ConString=" поставщик=sqloledb.1;сервер="";база=dbAspClassic;Уид="";фрд="";"

cn. Open (ConString)

набор RS=функция createobject("adodb, хранящихся.записей")
РС.ActiveConnection=СN


спицы.Выполнить("вставить psopdf(код) выберите пространство(60) + 'компании ООО'")
спицы.Выполнить("вставить psopdf(код) выберите пространство(60) + 'адрес'")
спицы.Выполнить("вставить psopdf(код) выберите пространство(60) + 'название улицы &ампер; не")
спицы.Выполнить("вставить psopdf(код) выберите' '")
спицы.Выполнить("вставить psopdf(код) выберите пространство(34) Билл + 'купли-продажи'")
спицы.Выполнить("вставить psopdf(код) выберите' '")
спицы.Выполнить("вставить psopdf(код) выбрать "продукт" + пробел(10) + "количество" + пробел(10) цена + '' + пробел(10) + "Итого"")
спицы.Выполнить("вставить psopdf(код) выберите заменить(пробел(56),' ', '_')")
спицы.Выполнить("вставить psopdf(код) выберите 'Произведения1' + пробел(9) + '10.00 '+ пробел(10) + '52.30' + пробел(10) + '5230.0'")
спицы.Выполнить("вставить psopdf(код) выберите пункт 'поле product2' + пробел(9) + '2.00 '+ пробел(10) + '10.00' + пробел(10) + '20.0'")
спицы.Выполнить("вставить psopdf(код) выберите заменить(пробел(56),' ', '_')")
спицы.Выполнить("вставить psopdf(код) выбрать место(50) + '5250.0'")

'Set rs = cn. Execute ("Select * from psopdf ")
Set rs = cn. Execute("sql2pdf ' Pardeep'")


Если не РС.ВФ тогда
Ответ.буфер = истина
с ответами
.Понятно
.ContentType = " приложение / pdf"
. Charset = " UTF-8"
. AddHeader " Content-Disposition", _
"вложение; имя файла=test. pdf"
конец с

"Мы пишем содержимое PDF!
пока не rs. EOF
ответ.записи РС.Поля ("код") & vbcrlf
РС.Метод MoveNext
венд

-Это все! Мы можем остановить сценарий здесь!

Ответ.Промывать
Ответ.конец

конец, если

спицы.Рядом
Set cn = ничего

%>

Хранимая процедура-это::


-- Если вы хотите удалить предыдущую версию нашей процедуры
-- раскомментируйте эти строки :

-- если существует (выберите * из dbo. sysobjects, где id = object_id(N'[dbo].[sql2pdf]') и OBJECTPROPERTY(id, N 'Isprocedure') = 1)
-- процедура сброса [dbo].[sql2pdf]
-- ИДТИ

создать процедуру sql2pdf
@filename VARCHAR (100)
АС
УСТАНОВИТЕ NOCOUNT ON
Создать таблицу #pdf (idnumber INT IDENTITY(1,1)
, код NVARCHAR(200))
Создать таблицу #xref (idnumber INT IDENTITY(1,1)
, код VARCHAR(30))
Создать таблицу #текста (идентификационный номер int удостоверение(1,1)
, код VARCHAR(200))

Объявить @end VARCHAR(7),
@beg VARCHAR(7),
@A1 VARCHAR(3),
@A2 VARCHAR(3),
@ad VARCHAR(5),
@cr VARCHAR(8),
@pr VARCHAR(9),
@ti VARCHAR(6),
@xstr VARCHAR(10),
@страница VARCHAR(8000),
@pdf VARCHAR(100),
@trenutniRed NVARCHAR(200),
@строк ИНТ,
@офсет ИНТ,
@len INT,
@nopg INT,
@fs INT,
@ole INT,
@x INT,
@file INT,
@object INT

Выберите @в формате PDF = 'с:\' + @имя + '.в формате PDF'
SET @page = "
SET @nopg = 0
SET @object = 6
SET @end = 'endobj'
SET @beg = '0 obj'
SET @a1 = '<<'
SET @a2 = '>>'
SET @ad = '0 R'
SET @cr = CHAR(67) + CHAR(114) + CHAR (101) + CHAR(97) + CHAR(116) + CHAR (111) + CHAR(114)
Набор @пр = типа char(80) + Чара(114) + Чара (111) + тип char(100) + Чара(117) + Чара (99 ) + Чара(101) + Чара(114)
SET @ti = CHAR(84) + CHAR(105) + CHAR (116) + CHAR(108) + CHAR(101)
SET @xstr = '00000 n'
SET @ofset = 396
Вставить в #ссылки(код) значения ('ссылка')
Вставить в #xref(код) значения ('0 10')
Вставить в #xref(код) значения ('0000000000 65535 f')
Вставить в #xref(код) значения ('0000000017' + @xstr)
Вставить в #xref(код) значения ('0000000790' + @xstr)
Вставить в # xref(код) значения ('0000000869' + @xstr)
Вставить в #xref(код) значения ('0000000144' + @xstr)
Вставить в #xref(код) значения ('0000000247' + @xstr)
Вставить в #xref(код) значения ('0000000321' + @xstr)
Вставить в #xref(код) значения ('0000000396' + @xstr)
Вставить в #pdf (код) значения ('%' + CHAR(80) + CHAR(68) + CHAR (70) + '-1.2')
Вставить в #pdf (код) значения ('%ÓÓÓÓ')
Вставить в #pdf (код) значения ('1' + @beg)
Вставить в #pdf (код) значения (@a1)
Вставить в #pdf (код) значения ('/' + @cr + '(Dypso BackOffice' + CHAR(80) + CHAR(83) + CHAR (79) + CHAR(80) + CHAR(68) + CHAR (70)+ ')')
Вставить в #pdf (код) значения ('/' + @pr + ' (хранимая процедура для ms sql)')
Вставить в #pdf (код) значения ('/' + @ti + '(SQL2' + CHAR(80) + CHAR(68) + CHAR (70)+ ')')
Вставить в #pdf (код) значения (@a2)
Вставить в #pdf (код) значения (@end)
Вставить в #pdf (код) значения ('4' + @beg)
Вставить в #pdf (код) значения (@a1)
Вставить в #pdf (код) значения ('/Type /Font')
Вставить в #pdf (код) значения ('/Subtype /Type1')
Вставить в #pdf (код) значения ('/Name /F1')
Вставить в #pdf (код) значения ('/Encoding 5' + @ad)
Вставить в #pdf (код) значения ('/BaseFont /Courier')
Вставить в #pdf (код) значения (@a2)
Вставить в #pdf (код) значения (@end)
Вставить в #pdf (код) значения ('5' + @beg)
Вставить в #pdf (код) значения (@a1)
Вставить в #pdf (код) значения ('/Type /Encoding')
Вставить в #pdf (код) значения ('/BaseEncoding /WinAnsiEncoding')
Вставить в #pdf (код) значения (@a2)
Вставить в #pdf (код) значения (@end)
Вставить в #pdf (код) значения ('6' + @beg)
Вставить в #pdf (код) значения (@a1)
Вставить в #pdf (код) значения ('/Font '+ @a1 + '/F1 4' + @ad + ''+ @a2 + ' / ProcSet [ /' + CHAR(80) + CHAR(68) + CHAR (70) + ' / Text ]')
Вставить в #pdf (код) значения (@a2)
Вставить в #pdf (код) значения (@end)
Вставить в #текст (код) (выберите код из psopdf)
Выберите @x = COUNT (*) из #text
Выберите @x = (@x / 60) + 1
В то время как @nopg < @x
НАЧАТЬ
Объявить курсор прокрутки SysKursor нечувствительным
Для выбора подстроки ((код + пробел (81)), 1, 80) из #text, где idnumber находится между ((@nopg * 60) + 1) и ((@nopg + 1) * 60 )
ТОЛЬКО ДЛЯ ЧТЕНИЯ
Открыть Сыскурсор
FETCH NEXT FROM SysKursor INTO @trenutniRed
Выбор объекта @ = @предмет + 1
Выберите @страница = @страницы + '' + литые (объект@как varchar) + @реклама
Выберите @len = LEN(@object) + LEN(@object + 1)
Вставить в #pdf (код) значения (CAST (@object AS VARCHAR) + @beg)
Вставить в #pdf (код) значения (@a1)
Вставить в #pdf (код) значения ('/Type /Page')
Вставить в #pdf (код) значения ('/Parent 3 ' + @ad)
Вставить в #pdf (код) значения ('/Resources 6 ' + @ad)
Выбор объекта @ = @предмет + 1
Вставить в #ПДФ (код) значения ('/содержание ' + литые(@Object как тип varchar) + @реклама)
Вставить в #pdf (код) значения (@a2)
Вставить в #pdf (код) значения (@end)
Выберите @ofset = @len + 86 + @ofset
INSERT INTO #xref (code) (SELECT SUBSTRING('0000000000' + CAST (@ofset AS VARCHAR),
LEN ('0000000000' + CAST (@ofset AS VARCHAR)) - 9,
LEN ('0000000000' + CAST(@ofset AS VARCHAR))) + @xstr)
Вставить в #pdf (код) значения (CAST (@object AS VARCHAR) + @beg)
Вставить в #pdf (код) значения (@a1)
Выбор объекта @ = @предмет + 1
Вставить в #pdf (код) значения ('/Length ' + CAST(@object AS VARCHAR) + @ad)
Вставить в #pdf (код) значения (@a2)
Вставить в #pdf (код) значения ('stream')
Вставить в #pdf (код) значения ('BT')
Вставить в #pdf (код) значения ('/F1 10 Tf')
Вставить в #pdf (код) значения ('1 0 0 1 50 802 Tm')
Вставить в #pdf (код) значения ('12 TL')
В то время как @@Fetch_Status = 0
НАЧАТЬ
Вставить в #pdf (код) значения ('T* ('+ @trenutniRed + ') Tj')
FETCH NEXT FROM SysKursor INTO @trenutniRed
КОНЕЦ
Вставить в #pdf (код) значения ('ET')
Вставить в #pdf (код) значения ('endstream')
Вставить в #pdf (код) значения (@end)
Выберите @строк = (выбрать количество(*) из текста, где между идентификационный номер ((@nopg * 60) + 1) и ((@nopg + 1) * 60 ))* 90 + 45
Выберите @nopg = @nopg + 1
Выберите @len = LEN(@object) + LEN(@object-1)
Выберите @ofset = @len + 57 + @ofset + @rows
INSERT INTO #xref (code) (SELECT SUBSTRING('0000000000' + CAST (@ofset AS VARCHAR),
LEN ('0000000000' + CAST (@ofset AS VARCHAR)) - 9,
LEN ('0000000000' + CAST(@ofset AS VARCHAR))) + @xstr)
Вставить в #pdf (код) значения (CAST (@object AS VARCHAR) + @beg)
Вставить в #pdf (код) значения (@rows)
Вставить в #pdf (код) значения (@end)
Выберите @len = LEN(@object) + LEN(@rows)
Выберите @ofset = @len + 18 + @ofset
INSERT INTO #xref (code) (SELECT SUBSTRING('0000000000' + CAST (@ofset AS VARCHAR),
LEN ('0000000000' + CAST (@ofset AS VARCHAR)) - 9,
LEN ('0000000000' + CAST(@ofset AS VARCHAR))) + @xstr)
Закрыть Сыскурсор
Освободить Сыскурсор
КОНЕЦ
Вставить в #pdf (код) значения ('2' + @beg)
Вставить в #pdf (код) значения (@a1)
Вставить в #pdf (код) значения ('/Type /Catalog')
Вставить в #pdf (код) значения ('/Pages 3 ' + @ad)
Вставить в #pdf (код) значения ('/PageLayout /OneColumn')
Вставить в #pdf (код) значения (@a2)
Вставить в #pdf (код) значения (@end)
Обновление внешних ссылок, установить код = (выбрать код из #ссылка где идентификационный номер = (выбрать Макс(идентификационный номер) из #ссылка)) Где idnumber = 5
Удалить из #ссылка где идентификационный номер = (выбрать Макс(идентификационный номер) из #ссылка)
Вставить в #pdf (код) значения ('3' + @beg)
Вставить в #pdf (код) значения (@a1)
Вставить в #pdf (код) значения ('/Type /Pages')
Вставить в #pdf (код) значения ('/Count ' + CAST (@nopg AS VARCHAR))
Вставить в #pdf (код) значения ('/MediaBox [ 0 0 595 842 ]')
Вставить в #pdf (код) значения ('/Kids [' + @page + ' ]')
Вставить в #pdf (код) значения (@a2)
Вставить в #pdf (код) значения (@end)
Выберите @ofset = @ofset + 79
Обновление внешних ссылок, установить код =(выбрать подстрока('0000000000' + литые(@офсет как varchar),
LEN ('0000000000' + CAST (@ofset AS VARCHAR)) - 9,
Лен('0000000000' + литые(@офсет как varchar))) + @xstr) где идентификационный номер = 6
Вставить в #xref(код) значения ('trailer')
Вставить в #xref(код) значения (@a1)
Выбор объекта @ = @предмет + 1
UPDATE #xref SET code = '0' + CAST(@object AS VARCHAR) WHERE idnumber = 2
Вставить в #xref(код) значения ('/Size ' + CAST (@object AS VARCHAR))
Вставить в #xref(код) значения ('/Root 2 ' + @ad)
Вставить в #xref(код) значения ('/Info 1 ' + @ad)
Вставить в #xref(код) значения (@a2)
Вставить в #xref(код) значения ('startxref')
Выберите @len = LEN(@nopg) + LEN(@page)
Выберите @ofset = @len + 86 + @ofset
Вставить в #xref(код) значения (@ofset)
Вставить в #xref(код) значения ('%%' + CHAR(69) + CHAR (79) + CHAR(70))
Вставить в #pdf (код) (выберите код из #xref)
Выберите код из #pdf
Выберите @trenutniRed = ' del '+ @pdf
Выполните сценарий @ole = sp_OACreate'.FileSystemObject', @fs OUT
EXEC master..xp_cmdshell @trenutniRed, NO_OUTPUT

Выполнить @Уле = процедуру sp_oamethod @ФС 'OpenTextFile', файл @ть, @в формате PDF, 8, 1


Если LEN (@filename)> 0
НАЧАТЬ
-- Решил создать файл непосредственно с помощью
-- SQL Server

Объявить курсор прокрутки SysKursor нечувствительным
Для выбора кода из заказа #в формате PDF, идентификационный номер
ТОЛЬКО ДЛЯ ЧТЕНИЯ
Открыть Сыскурсор
FETCH NEXT FROM SysKursor INTO @trenutniRed
В то время как @@Fetch_Status = 0
НАЧАТЬ
Запустить файл @Уле = процедуру sp_oamethod@, 'строку', значение null, @trenutniRed
FETCH NEXT FROM SysKursor INTO @trenutniRed
КОНЕЦ
Закрыть Сыскурсор
Освободить Сыскурсор
КОНЕЦ
ЕЩЁ
НАЧАТЬ
-- Создайте файл, вызвав сохраненный
-- proc от ASP и получить результат обратно

Выберите код из #того, формате PDF, идентификационный номер
КОНЕЦ




Удалить из psopdf
EXECUTE @ole = sp_OADestroy @file
EXECUTE @ole = sp_OADestroy @fs

Sandeep Mewara

И зачем вам редактировать свой собственный вопрос, который был помечен как решенный вами ? Зачем снова его вытаскивать?

2 Ответов

Рейтинг:
6

Pardeep singh from Chandigarh

код работает для меня, просто добавив SET NOCOUNT ON в верхней части


SumanRoy

его записка работает...Недопустимое имя объекта "psopdf".

Рейтинг:
0

Ganesan Senthilvel

Решение, которое я обычно предлагаю своим клиентам в этой ситуации, заключается в использовании служб SQL Server Reporting Services (SSRS). Вы можете использовать элемент управления ReportViewer, входящий в его состав, для создания PDF-файлов, электронных таблиц Excel, XML-файлов, CSV-файлов и других. Если вам нужна специальная отчетность, существует также конструктор отчетов.

За исключением этого, вы можете использовать OpenXml для создания электронных таблиц Excel, и существует множество доступных инструментов PDF


[no name]

сэр мне нужно сгенерировать pdf файл с помощью хранимой процедуры а затем выполнить это на странице asp