У меня есть подпись, которая хорошо перетаскивается, но у меня проблема с функцией масштабирования и поворота, растровое изображение может работать хорошо, но я работаю с точкой F. Проблема в точке F, потому что mupdf принимает точку F
Я хочу просто метод поворота и метод увеличения и уменьшения масштаба, как это сделать. У меня нет решений в стеке или других вещей
Это изображение
также ограничивающая рамка не вращается. Я выполнил некоторые функции, но не работает
а теперь посмотрите мой код, если вам понадобится какой-либо другой код, я вам предоставлю
У меня есть подпись, которая хорошо перетаскивается, но у меня проблема с функцией масштабирования и поворота, растровое изображение может работать хорошо, но я работаю с точкой F. Проблема в точке F, потому что mupdf принимает точку F Я хочу просто метод поворота и метод увеличения и уменьшения масштаба, как это сделать. У меня нет решений в стеке или других вещей Это изображение также ограничивающая рамка не вращается. Я выполнил некоторые функции, но не работает а теперь посмотрите мой код, если вам понадобится какой-либо другой код, я вам предоставлю [code]public void setPage(final int page, final PointF size) { if (this.mDrawEntire != null) { this.mDrawEntire.cancelAndWait(); this.mDrawEntire = null; } this.mIsBlank = false; if (this.mSearchView != null) { this.mSearchView.invalidate(); } this.mPageNumber = page; if (this.mEntire == null) { (this.mEntire = (ImageView) new OpaqueImageView(this.mContext)).setScaleType(ImageView.ScaleType.MATRIX); this.addView((View) this.mEntire); } this.mSourceScale = Math.min(this.mParentSize.x / size.x, this.mParentSize.y / size.y); this.mSize = new Point((int) (size.x * this.mSourceScale), (int) (size.y * this.mSourceScale)); this.pageWidth = (int) (size.x * this.mSourceScale); this.pageHeight = (int) (size.y * this.mSourceScale); this.mEntire.setImageBitmap((Bitmap) null); this.mEntire.invalidate(); (this.mGetLinkInfo = new AsyncTask() { protected LinkInfo[] doInBackground(final Void... v) { return PageView.this.getLinkInfo(); }
protected void onPostExecute(final LinkInfo[] v) { PageView.this.mLinks = v; if (PageView.this.mSearchView != null) { PageView.this.mSearchView.invalidate(); } } }).execute(new Void[0]); (this.mDrawEntire = new CancellableAsyncTask(this.getDrawPageTask(this.mEntireBm, this.mSize.x, this.mSize.y, 0, 0, this.mSize.x, this.mSize.y)) { @Override public void onPreExecute() { PageView.this.setBackgroundColor(-1); PageView.this.mEntire.setImageBitmap((Bitmap) null); PageView.this.mEntire.invalidate(); if (PageView.this.mBusyIndicator == null) { PageView.this.mBusyIndicator = new ProgressBar(PageView.this.mContext); PageView.this.mBusyIndicator.setIndeterminate(true); PageView.this.addView((View) PageView.this.mBusyIndicator); PageView.this.mBusyIndicator.setVisibility(View.INVISIBLE); PageView.this.mHandler.postDelayed((Runnable) new Runnable() { @Override public void run() { if (PageView.this.mBusyIndicator != null) { PageView.this.mBusyIndicator.setVisibility(VISIBLE); } } }, 200L); } }
@Override public void onPostExecute(final Void result) { PageView.this.removeView((View) PageView.this.mBusyIndicator); PageView.this.mBusyIndicator = null; PageView.this.mEntire.setImageBitmap(PageView.this.mEntireBm); PageView.this.mEntire.invalidate(); PageView.this.setBackgroundColor(0); } }).execute(new Void[0]); if (this.mSearchView == null) { Log.d("PLOL", "setPage: Checking " + mSearchView); this.addView(this.mSearchView = new View(this.mContext) { protected void onDraw(final Canvas canvas) { super.onDraw(canvas); final float scale = PageView.this.mSourceScale * this.getWidth() / PageView.this.mSize.x; PageView.this.current_scale = scale; final Paint paint = new Paint(); if (!PageView.this.mIsBlank && PageView.this.mSearchBoxes != null) { paint.setColor(SharedPreferencesUtil.getSearchTextColor()); for (final RectF rect : PageView.this.mSearchBoxes) { canvas.drawRect(rect.left * scale, rect.top * scale, rect.right * scale, rect.bottom * scale, paint); } } if (!PageView.this.mIsBlank && PageView.this.mLinks != null && PageView.this.mHighlightLinks) { paint.setColor(PageView.this.LINK_COLOR); for (final LinkInfo link : PageView.this.mLinks) { canvas.drawRect(link.rect.left * scale, link.rect.top * scale, link.rect.right * scale, link.rect.bottom * scale, paint); } } if (PageView.this.mSelectBox != null && PageView.this.mText != null) { int color = getInkColor(); paint.setColor(Color.argb(123, Color.red(color), Color.green(color), Color.blue(color))); PageView.this.processSelectedText(new TextProcessor() { RectF rect;
@Override public void onStartLine() { this.rect = new RectF(); }
@Override public void onWord(final TextWord word) { this.rect.union((RectF) word); }
@Override public void onEndLine() { if (!this.rect.isEmpty()) { canvas.drawRect(this.rect.left * scale, (this.rect.top + HIGHLIGHT_RECT_OFFSET) * scale, this.rect.right * scale, (this.rect.bottom - HIGHLIGHT_RECT_OFFSET) * scale, paint); } } }); } if (PageView.this.mItemSelectBox != null) { paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(4.0f); paint.setColor(-9868951); canvas.drawRect(PageView.this.mItemSelectBox.left * scale, PageView.this.mItemSelectBox.top * scale, PageView.this.mItemSelectBox.right * scale, PageView.this.mItemSelectBox.bottom * scale, paint); } if (PageView.this.mDrawing != null) { final Path path = new Path(); paint.setAntiAlias(true); paint.setDither(true); paint.setStrokeJoin(Paint.Join.ROUND); paint.setStrokeCap(Paint.Cap.ROUND); paint.setStyle(Paint.Style.FILL); paint.setStrokeWidth(PageView.this.INK_THICKNESS * scale); paint.setColor(PageView.this.INK_COLOR); for (final ArrayList arc : PageView.this.mDrawing) { if (arc.size() >= 2) { final Iterator iit = arc.iterator(); PointF p = iit.next(); float mX = p.x * scale; float mY = p.y * scale; path.moveTo(mX, mY); while (iit.hasNext()) { p = iit.next(); final float x = p.x * scale; final float y = p.y * scale; path.quadTo(mX, mY, (x + mX) / 2.0f, (y + mY) / 2.0f); mX = x; mY = y; } path.lineTo(mX, mY); } else { final PointF p = arc.get(0); canvas.drawCircle(p.x * scale, p.y * scale, PageView.this.INK_THICKNESS * scale / 2.0f, paint); } } paint.setStyle(Paint.Style.STROKE); canvas.drawPath(path, paint); }
if (signaturePoints != null && !signaturePoints.isEmpty()) { Log.d("PLOL", "onDraw: 6 " + mSearchView); final Path path = new Path(); paint.setAntiAlias(true); paint.setDither(true); paint.setStrokeJoin(Paint.Join.ROUND); paint.setStrokeCap(Paint.Cap.ROUND); paint.setStyle(Paint.Style.FILL); paint.setStrokeWidth(PageView.this.INK_THICKNESS); paint.setColor(PageView.this.INK_COLOR); for (final ArrayList arc : PageView.this.signaturePoints) { Log.d("LOGO", "onDraw: " + arc); if (arc.size() >= 2) { final Iterator iit = arc.iterator(); PointF p = iit.next(); float mX = p.x * scale; float mY = p.y * scale; path.moveTo(mX, mY); while (iit.hasNext()) { p = iit.next(); final float x = p.x * scale; final float y = p.y * scale; path.quadTo(mX, mY, (x + mX) / 2.0f, (y + mY) / 2.0f); mX = x; mY = y; } path.lineTo(mX, mY); } else { final PointF p = arc.get(0); canvas.drawCircle(p.x * scale, p.y * scale, PageView.this.INK_THICKNESS * scale / 2.0f, paint); } } paint.setStyle(Paint.Style.STROKE); canvas.drawPath(path, paint); boundingBox = calculateBoundingBox(signaturePoints); if (boundingBox != null) { paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(2.0f); paint.setColor(Color.RED); canvas.drawRect(boundingBox.left * scale, boundingBox.top * scale, boundingBox.right * scale, boundingBox.bottom * scale, paint); canvas.drawBitmap(deleteIcon, boundingBox.left * scale - deleteIcon.getWidth() +20, boundingBox.top * scale - deleteIcon.getHeight()+20, null); canvas.drawBitmap(zoomIcon, boundingBox.right * scale - 20, boundingBox.bottom * scale -20 , null); } // CommTools.addsignature = false; } } }); } this.requestLayout(); } [/code] и это связано с каким-то действием вверх, вниз и т. д. [code] public void actionmethod(MotionEvent event) { if (event.getPointerCount() >= 2) { calculateMidPoint(event); oldDistance = calculateDistance(event.getX(0), event.getY(0), event.getX(1), event.getY(1)); } }
У меня есть подпись, которая хорошо перетаскивается, но у меня проблема с функцией масштабирования и поворота, растровое изображение может работать хорошо, но я работаю с точкой F. Проблема в точке F, потому что mupdf принимает точку F
Я хочу просто...
Когда я использую пакет itextpdf для подписи PDF-файла, я успешно подписал PDF-файл, но после подписания отображается содержимое подписи «Цифровая подпись...», что показывает не имя подписывающего лица, а мое представление PDF-файла. был...
Я использую itext7 для цифровой подписи PDF-файла с использованием специального внешнего вида. Я открыл документ в режиме добавления, и для повернутых страниц подпись отображается неправильно. Я попытался установить setIgnorePageRotationForContent,...
Мне нужно подписать PDF-файл с помощью библиотеки PDFBox и AWS CloudHSM.
В itext все работает нормально, но при использовании другого способа подпись отображается недействительно. Ниже приведены коды
Рабочий код -:
public byte[]...